这是我为遍历间隔树而编写的函数。我注意到它无法访问某些节点。假设代码非常清楚,我想知道它失败的地方。
public boolean searchTree(Node node,int x)
{
while(node!=null&&!node.getInterval().containsPoint(x))
{
if(node.getNodeLeft()!=null&&(node.getNodeLeft().getMax()>=x))
{
node=node.getNodeLeft();
}
else
{
node=node.getNodeRight();
}
}
return node!=null;
}
答案 0 :(得分:0)
树中的任何节点都以点为中心,比如p。 左子树包含p左侧的所有区间,右子树包含p右侧的所有区间。节点本身包含与p重叠的所有间隔。
现在,如果你的x< p,然后可能存在来自左子树的间隔,其包含x,但也可能存在来自节点本身的间隔,其包含x(和p)。唯一的保证是正确的子树不包含包含x的区间。
所以你错过了节点本身的那些间隔。
我不知道间隔树是什么,所以我的理解来自这里http://en.wikipedia.org/wiki/Interval_tree