我有点困惑,因为插入代码的代码是:
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)
吗?有什么不同?
答案 0 :(得分:1)
在你建议的解决方案中,你要为root.left和root.right赋值,这会改变树,你在find方法中肯定不需要的东西(应该保持树不变)。返回节点只是递归地查找它,并返回它。
主要区别在于插入时,您确实想要更改树,即将新节点添加到适当的位置。如果要在树中查找节点,则不希望进行任何分配,只需返回要查找的节点。