我想在链接列表二进制搜索树中找到给定节点到根的距离。我有以下代码来计算树的高度(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 ;
}
答案 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),然后在节点中向父节点开始向上查询。由于您向下穿过以到达节点,因此在其他方向上计算高度并没有多大用处:)