2017-06-25 112 views
2

我已经编写了用于计算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 

编辑:发现的bug。我曾写过

(root.right == null && root.right == null) 

,而不是

(root.left == null && root.right == null) 

感谢彼得·霍尔指出来。

+0

难道你不能在其级联形式中显示BST?你确定插入是否正确完成? –

+0

你的空间条被破坏了吗? – Water

+0

@WillemVanOnsem是的,插入是正确完成的,我已经逐个检查了代码的其他部分。唯一的缺陷必须在这个块中。 –

回答

2

这是一个简单的错字。你正在检查right == null两次,当你几乎肯定意味着left == null其中之一。

I.e.这个条件:

if(root == null || (root.right == null && root.right == null)) return 0; 

应该是:

if(root == null || (root.right == null && root.left == null)) return 0; 

,这将给你你想要的答案。

+0

感谢您指出错误。 –