2012-06-06 1 views
4

각 노드에 3 개의 double이 저장되고 각 노드에 6 개의 double이 저장되는 트리를 만드는 방법을 찾으려고합니다.노드 당 여러 값을 저장하는 트리

문제는 찾기 및 삽입 방법 (제거 필요 없음)을 구현하는 방법을 찾는 것입니다.

기본적으로 내 트리는 x, y, z 값을 보유하고 있으며 find를 호출하면 x, y 및 z 값이 포함 된 노드를 찾으려고합니다.

이 문제에 어떻게 접근해야하며 솔루션에 대한 아이디어가 있습니까?

감사합니다.

+1

이 트리를 구현하는 언어는 무엇입니까? –

+0

C#으로 구현하고 있습니다. –

답변

4

당신이 또한 주어진 요소에 finding nearest neighbor 수 있습니다 k-d tree 데이터 구조, 찾고있는 것 같다.

+0

나는 OP가 뭔가를 찾고 있다는 점에서 아마도 당신이 옳을 것이라고 생각합니다. @ amit 3D-ish thingy의 도움. – bluevector

0

기본적으로 노드 당 하나의 값을 저장합니다. 이 x, y, z 값을 3D 점으로 처리 할 수 ​​있습니다. 한 노드의 왼쪽에서 (0, 0, 0)에 가깝게 putpoint를 그리고 오른쪽에 putpoint를 추가로 보유합니다. 이와 같은 구조를 가지고 있다면 일반 이진 트리에서와 같이 데이터를 검색하고 삽입 할 수 있습니다.

1
public class BinaryTreeNode<T> 
{ 
    public T Value {get; set;} 

    public BinaryTreeNode<T> Left {get; set;} 
    public BinaryTreeNode<T> Right {get; set;} 

    public BinaryTreeNode<T> Seach(T forWhat) 
    { 
     if(Value == forWhat) return this; 

     BinaryTreeNode<T> leftResult = Left.Search(forWhat); 
     if(leftResult != null) return leftResult; 

     BinaryTreeNode<T> rightResult = Right.Search(forWhat); 
     if(rightResult != null) return rightResult; 

     return null; 
    } 
} 

BinaryTreeNode<Tuple<double, double, double>> threeDoublesTree = new BinaryTreeNode<Tuple<double, double, double>>(); 

BinaryTreeNode<Tuple<double, double, double, double, double, double>> sixDoublesTree = new BinaryTreeNode<Tuple<double, double, double, double, double, double>>(); 
+0

엔트리에 가장 가까운 이웃을 어떻게 찾습니까? 정교하게 신경 써야 할까? – amit

+0

호흡 우선 seach – bluevector

+0

당신은 철저하게 의미합니까? 그것의 시간 소모가 트리의 요소 수에 선형 적이 지 않습니까? 아니면 내가 너를 오해하고 있니? – amit