簡體   English   中英

在Java中計算二進制樹中的葉節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM