在BST中查找节点到根的距离

时间:2013-06-09 11:09:59

标签: java data-structures binary-search-tree treenode

我想在链接列表二进制搜索树中找到给定节点到根的距离。我有以下代码来计算树的高度(root.getHeightN()),从根到叶,但我现在需要的是从叶到根。

public int getHeightN(){
                int l, r;

                if(this.left == null){
                    l = 0;
                }else{
                    l = this.left.getHeightN();
                }

                if(this.right == null){
                    r = 0;
                }else{
                    r = this.right.getHeightN();
                }

                if(r > l){
                    return 1+r;
                }else{
                    return 1+l;
                }
            }

这是Node类:

protected class Node
{
    Key key ;
    Val val ;
    Node left , right ;
    Node ( Key key , Val val )
    {
        this.key = key ;
        this.val = val ;
    }

2 个答案:

答案 0 :(得分:0)

我可以在这里提出如何继续前进的概念。

现在您想要从leaf到root,请按照以下步骤操作。

1.遍历树到叶节点(不计算高度)

只需检查 if(ptr-> next!= null)ptr ++;

2.一旦到达叶节点,再次通过检查

进行遍历

if(ptr(Parent)) //如果父项存在则返回TRUE,否则返回FALSE

<强> HeightCount ++;

3.通过这种方式,您将到达根节点,然后停止遍历。

4. HeightCount 的值是树的高度(即BST中节点到根的距离)。

答案 1 :(得分:0)

您需要在每个节点中添加额外字段来存储父信息。如果您只想打印从节点(N)到根节点的路径,可以在没有任何字段的情况下完成,否则您需要在每个节点中存储父信息。您必须从根到达节点(N),然后在节点中向父节点开始向上查询。由于您向下穿过以到达节点,因此在其他方向上计算高度并没有多大用处:)