2017-02-03 91 views
1

以下是Java拼圖(http://code-exercises.com/programming/medium/28/strict-binary-tree-check)中的一個小問題。其任務是編寫一種方法來檢查在給定的二叉樹中是否所有節點都有0或2個子節點。Java中二叉樹的遞歸檢查

他們的解決方案是以下

public Boolean isStrictTree(TreeNode node) { 
    if (node == null) {return true;} 
    if ((node.left() == null && node.right() != null) || (node.left() != null && node.right() == null)) {return false;} 

    return isStrictTree(node.left()) && isStrictTree(node.right()); 
} 

我想出了類似的東西,但它不工作。所不同的是

一)1號線 - 處理無效的情況下(返回「零」,而不是「真」)

B)遞歸結構 - 礦以某種方式混在一起(在某種程度上即應如果我追蹤它會發生什麼事情),而不是將解決方案分散在兩行 - 條件語句和返回語句。

public Boolean isStrictTree(TreeNode node) { 
    if (node == null) {return null;} 

    else if ((isStrictTree(node.left()) == true) && (isStrictTree(node.right())==null)) {return false;} 

    return true; 
} 

該腳本運行但不返回任何內容。我真的有興趣瞭解爲什麼它不起作用,似乎是我可以在這裏學到的東西,所以任何見解都是值得讚賞的。

+0

請提供整個MCVE。添加驅動問題結果的主程序。我很好奇如何定義一個返回類型和值的例程「不返回任何東西」。在語義上,這應該是不可能的。 – Prune

回答

2

有兩種選擇:節點有效/平衡,然後返回true或節點無效/不平衡,返回false。爲什麼你想引入第三種狀態 - null?這件事沒有必要。

爲什麼它不工作:在(isStrictTree(node.left()) == true您的來電isStrictTree(...)將在某個時間點返回null,所以你比較它與true時得到一個NullPointerException異常。