2013-03-15 149 views
1

我在計算二叉樹中的節點時遇到了問題。這是一個真正簡單的樹,如下圖所示。計算二叉樹中的節點

       (5) 
         (3)-------^-------(7) 
        (2)---^---(6)   ^-------(9) 
         (5)---^---(8) 

我添加了8個節點,所以應該有8個。但是當我運行我的代碼時,它會計算7個節點。我認爲這只是計算所有左側節點和右側節點,並且不計算根,但是我在將節點數設置爲1之前對根節點進行計數,然後對左側和右側節點進行計數。請參閱下面的代碼

private int getNumNodes(Node<E> root){ 
     numNodes = 1; // starts by counting the root 

     // counts the left nodes 
     if(root.left != null){ 
      numNodes += getNumNodes(root.getLeft()); 
     } 

     // counts the right nodes 
     if(root.right != null){ 
      numNodes += getNumNodes(root.getRight()); 
     }    
    return numNodes; 
} 

public int getNumNodes(){ 
    return root == null ? 0 : getNumNodes(root); 
} 

它必須在某處丟失計數,但我不確定它在哪裏發生。你能幫我一下嗎?謝謝。

+1

要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後如果有必要,你應該構造一個[最小測試用例](http://sscce.org)。) – 2013-03-15 01:07:49

+0

我想知道'close(1/5)'是什麼意思。 – 2013-03-15 01:09:31

+0

@jdb不,它應該是一個局部變量而不是類成員 – 2013-03-15 01:10:53

回答

5

我認爲問題在於numNodes是一個類成員,它應該是方法的局部變量。

+0

+1似乎正確,還要注意,如果給出null作爲輸入,則代碼將失敗 – 2013-03-15 01:10:11