![](/img/trans.png)
[英]Java: Why can't I declare the reference-variable in one statement and create the referenced object in another statement of the class?
[英]Why can't I get the height of a BST in one statement (Java)
我正在學習二叉搜索樹,並且有一個練習題涉及遞歸查找樹的高度。
這是被接受的 Java 代碼:
public static int getHeight(Node root){
if (root == null)
return -1;
else {
int leftHeight = getHeight(root.left);
int rightHeight = getHeight(root.right);
if (leftHeight > rightHeight)
return leftHeight + 1;
else
return rightHeight + 1;
}
}
這是我最初嘗試並認為可行的代碼(在教程中作為偽代碼給出):
public static int getHeight(Node root){
return 1 + Math.max(getHeight(root.left), getHeight(root.right));
}
但是,當我去提交第二個語句時,它給了我一個運行時錯誤和 NPE。 是if (root == null){return -1};
第二條語句不隱含的基本情況?
是的,當root
是 null 時, root.left
被調用,這就是你得到 NPE 的原因。
並且遞歸 function 需要一個基本案例,它不會再次調用遞歸 function。 在這里,當root
是null
時,這意味着您在root.left
或root.right
上調用getHeight()
,其中root
是樹的葉子,這是基本情況。
@Eklavya 在這里有正確的答案,但是由於您正在學習並且我喜歡遞歸,因此可以添加一些好的經驗法則。
root.left()
而不是root.left
)。 現在有點痛苦,但如果你堅持下去,它會為你節省數千小時的浪費時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.