我已经编写了计算BST高度的代码,但它给了我错误的答案。结果是3,但我希望它是4.有人能指出我的逻辑中的缺陷吗? (我将叶节点的高度定义为零,因此高度=边数)。
public static int getHeight(Node root){
if(root == null || (root.right == null && root.right == null)) return 0;
int leftHeight = getHeight(root.left);
int rightHeight = getHeight(root.right);
return 1 + ((leftHeight >= rightHeight) ? leftHeight : rightHeight);
}
元素按以下顺序添加到空BST中:
20, 50, 35, 44, 9, 15, 62, 11, 13
所以我希望它应该是这样的:
20
/ \
/ \
9 50
\ / \
15 35 62
/ \
11 44
\
13
编辑:发现错误。我写过
(root.right == null && root.right == null)
而不是
(root.left == null && root.right == null)
感谢Peter Hall指出它。
答案 0 :(得分:2)
这是一个简单的拼写错误。您正在检查right == null
两次,当您几乎肯定对其中一个人left == null
时。{/ p>
即。这个条件:
if(root == null || (root.right == null && root.right == null)) return 0;
应该是:
if(root == null || (root.right == null && root.left == null)) return 0;
这会给你你想要的答案。