2013-04-11 60 views
3

我想寫一個方法來搜索二叉樹的所有節點的傳遞值,並找到時返回節點。我似乎無法獲得搜索樹的兩側的邏輯權限。這是我到目前爲止。搜索Java中的二叉樹的所有節點

private Node locate(String p, Node famTree) 
{ 
    if (root == null)//If tree empty return null; 
     return null; 
    if (famTree.value.equals(p)) //If leaf contains the passed parent value the boolean becomes true. 
     return famTree; 
    if (famTree.left != null) 
     return locate(p,famTree.left); 
    else 
     return locate(p,famTree.right); 

} 

回答

8

您只在沒有左子樹時搜索右子樹。當在左側子樹中找不到字符串時,您還想搜索它。這應該這樣做:

private Node locate(String p, Node famTree) 
{ 
    Node result = null; 
    if (famTree == null) 
     return null; 
    if (famTree.value.equals(p)) 
     return famTree; 
    if (famTree.left != null) 
     result = locate(p,famTree.left); 
    if (result == null) 
     result = locate(p,famTree.right); 
    return result; 

} 
+0

你改變了什麼?爲什麼這個工作會不同? – CloudyMarble 2013-04-11 05:17:46

+0

@TwoMore - 我不只返回搜索左子樹的結果,只要它不是'null'。我捕獲搜索左側子樹的結果,並搜索右側子樹是否未找到。 – 2013-04-11 05:18:56

+0

嗯,但有些時候是你的leftsubtree根和第一個如果將返回null我是吧? – CloudyMarble 2013-04-11 05:22:19