我正在尝试找到一种方法来创建一个二叉树,其中每个节点中存储3个双精度树,而另一个树中每个节点中存储6个双精度数。
我遇到的问题是找出一种实现查找和插入方法的方法(无需删除)。
基本上,我的树正在保存x,y,z值,当我调用find时,我希望它返回包含最接近我想要找到的x,y和z值的节点。
我应该如何处理这个问题以及解决方案的一些想法?
谢谢!
答案 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),在右侧则保持更多的节点。如果您有这样的结构,您可以像在普通二叉树中一样搜索和插入数据。