插入和查找节点结构

时间:2016-07-07 16:32:41

标签: java binary-search-tree

我有点困惑,因为插入代码的代码是:

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 个答案:

答案 0 :(得分:1)

在你建议的解决方案中,你要为root.left和root.right赋值,这会改变树,你在find方法中肯定不需要的东西(应该保持树不变)。返回节点只是递归地查找它,并返回它。

主要区别在于插入时,您确实想要更改树,即将新节点添加到适当的位置。如果要在树中查找节点,则不希望进行任何分配,只需返回要查找的节点。