2016-06-21 203 views
-4

我有一個應該在二叉樹中找到一個節點的方法,它包含給定的value。下面提供的方法不起作用,問題是爲什麼。查找二叉樹中的節點

public Node search(Node node, int value) { 
    if(node.value == value) return node; 
    if(node.left != null) search(node.left, value); 
    if(node.right != null) search(node.right, value); 
    return null; 
} 

的問題是,這種方法有時會返回null時實際上是在樹中給定value一個節點。這是爲什麼?

+0

代碼不足以說明。爲什麼你的二叉樹不使用泛型?如果你可以存儲任何引用類型,它會更有用。 – duffymo

回答

5

你不應該忽略的遞歸調用的返回值,你的方法不應該使用root,但傳遞的node

public Node search(Node node, int value) { 
    if(node.value == value) return node; 
    Node found = null; 
    if(node.left != null) 
     found = search(node.left, value); 
    if(found == null && node.right != null) 
     found = search(node.right, value); 
    return found; 
} 
0

像埃倫說,你的電話搜索通過if聲明AREN不返回節點,因爲你的功能應該是這樣的。您當前的代碼工作的唯一情況是第一個節點n滿足n.value == value