区间树遍历

时间:2012-04-27 08:23:42

标签: algorithm data-structures interval-tree

这是我为遍历间隔树而编写的函数。我注意到它无法访问某些节点。假设代码非常清楚,我想知道它失败的地方。

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;
}

1 个答案:

答案 0 :(得分:0)

树中的任何节点都以点为中心,比如p。 左子树包含p左侧的所有区间,右子树包含p右侧的所有区间。节点本身包含与p重叠的所有间隔。

现在,如果你的x< p,然后可能存在来自左子树的间隔,其包含x,但也可能存在来自节点本身的间隔,其包含x(和p)。唯一的保证是正确的子树不包含包含x的区间。

所以你错过了节点本身的那些间隔。

我不知道间隔树是什么,所以我的理解来自这里http://en.wikipedia.org/wiki/Interval_tree