4

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

我遇到的问题是想办法实现查找和插入方法(不需要删除)。

基本上,我的树保存 x、y、z 值,当我调用 find 时,我希望它返回包含最接近我试图查找的 x、y 和 z 值的节点。

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

谢谢!

4

3 回答 3

4

您似乎正在寻找kd 树数据结构,它还允许找到给定元素的最近邻居。

于 2012-06-06T20:41:32.970 回答
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>>();
于 2012-06-06T20:40:47.917 回答
0

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

于 2012-06-06T20:38:07.183 回答