[英]Count leaf nodes in binary tree in Java
我編寫了下面的代碼來查找二叉樹中的葉節點數。 我在GeeksForGeeks上提交了它,它給出的結果是正確的答案,但我不確定他們是否已經檢查了大量的測試用例。 你能否告訴我這是否是正確的解決方案?
int sum=0;
int countLeaves(Node node)
{
// Your code
if(node==null)
return sum;
if(node.left!=null || node.right!=null)
{
sum=countLeaves(node.left);
sum=countLeaves(node.right);
}
else
{
sum++;
}
return sum;
}
您的解決方案似乎確實產生了正確的結果,但它以一種尷尬的方式實現。 將countLeaves(node.left)
和countLeaves(node.right)
分配給sum
看起來像第一眼就像一個bug。 乍一看,這是完全沒必要的,因為sum
已經包含了你分配給它的值。
如果您使用的是外部的變量( sum
)來計算葉(這通常是一個壞主意),還有在分配遞歸調用的結果是沒有意義的sum
。
你可以簡單地寫:
int sum=0;
int countLeaves(Node node)
{
if(node==null)
return sum;
if(node.left!=null || node.right!=null) {
countLeaves(node.left);
countLeaves(node.right);
} else {
sum++;
}
return sum;
}
您甚至可以更改該方法以返回任何內容,並在調用后從sum
變量中獲取結果。
但是,我建議避免使用sum
變量,以使代碼更清晰:
int countLeaves(Node node)
{
if (node==null)
return 0;
else if (node.left!=null || node.right!=null) {
return countLeaves(node.left) + countLeaves(node.right);
} else {
return 1;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.