2016-07-07 44 views
0

我有點困惑,因爲用於插入代碼的代碼是:插入和查找節點結構

public Node insert(Node root, int data) { 

    // if tree is empty, create it and return 
    if(root == null) 
     return root = new Node(data); 

    // recursively insert new node 
    if(data < root.data) 
     root.left = insert(root.left, data); 

    else if(data > root.data) 
     root.right = insert(root.right, data); 

    return root; 

} 

,找到一個節點是:

public Node find(Node root, int data) { 

    if(root == null) 
     return null; 

    if(root.data == data) { 
     System.out.println(root.data + " found"); 
     return root; 
    } 


    if(data < root.data) 
     return find(root.left, data); 
    else if(data > root.data) 
     return find(root.right, data); 

    return root; 
} 

不能使用root.left = find(root.left, data)root.right = find(root.right, data)在查找方法而不是return find(root.left, data)return find(root.right, data)?有什麼不同?

回答

1

在您建議的解決方案中,您將值分配給root.left和root.right,這會更改樹,您在find方法中不希望發生的某些操作(應該使樹保持原樣)。返回節點只是遞歸地查找它並返回它。

主要區別在於,當您插入時,您確實想要更改樹,即將新節點添加到適當的位置。當你想在樹中找到一個節點時,你不想做任何分配,只需返回你正在尋找的節點。

+0

這現在非常有意義。我很欣賞智慧! –