树每个节点存储多个值

时间:2012-06-06 20:32:31

标签: data-structures find binary-tree treenode

我正在尝试找到一种方法来创建一个二叉树,其中每个节点中存储3个双精度树,而另一个树中每个节点中存储6个双精度数。

我遇到的问题是找出一种实现查找和插入方法的方法(无需删除)。

基本上,我的树正在保存x,y,z值,当我调用find时,我希望它返回包含最接近我想要找到的x,y和z值的节点。

我应该如何处理这个问题以及解决方案的一些想法?

谢谢!

3 个答案:

答案 0 :(得分:4)

您似乎正在寻找k-d tree数据结构,这也允许finding nearest neighbor到给定元素。

答案 1 :(得分: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>>();

答案 2 :(得分:0)

基本上每个节点存储1个值。您可以将这些x,y,z值视为3D点。在一个节点的左侧,您将putpoint更靠近(0,0,0),在右侧则保持更多的节点。如果您有这样的结构,您可以像在普通二叉树中一样搜索和插入数据。