2017-10-28 122 views
0

這兩個版本之間有什麼區別?計算樹中的兩個版本離開樹

public static int countLeaves(IntTreeNode root) { 
    if (root == null) { 
     return 0; 
    } else 
     return 1 + countLeaves(root.left) + countLeaves(root.right); 
} 

public static int countLeaves(IntTreeNode root) { 
    if (root == null) { 
     return 0; 
    } else if (root.left == null && root.right == null) { 
     return 1; 
    } else 
     return countLeaves(root.left) + countLeaves(root.right); 
} 

我在互聯網上找不到任何使用第一個版本的東西。 第一個版本是否錯誤?

我試圖在紙上描繪它們,它們看起來是一樣的。 但我只想確定一下。

+0

當您運行它時,第一個版本是否會提供正確的結果? – ChiefTwoPencils

+0

@ChiefTwoPencils我測試了幾個案例,是的。 – chuck

+1

我不認爲他們可以給出相同的結果。 – ChiefTwoPencils

回答

1

第一個似乎計算樹中的所有節點,而第二個計算所有葉節點。

的確,在第一個中,當沒有有效的樹時,遞歸停止(root == null),並且它總是進入遞歸檢查左右樹的1(對於當前節點)。

第二個只使用條件if (root.left == null && root.right == null)來計數葉子。

這是假設葉被識別爲具有nullroot.leftnullroot.right的節點。

+0

哦,你是對的。 – chuck

1

第一個版本不算葉 - 它是計數節點。

第二個版本的確在計算葉子。

這些方法將返回相同的結果,在這裏是一個例子:

root(5) 
    / \ 
leaf(3) leaf(7) 

用於這種樹中的第一種方法將返回圖3(節點的數量),第二個將返回2(數葉子)。