我正在尝试编写自己的二叉树,但是插入时遇到问题。树中的值是重复的。我有内部静态类Node,其中包含“Node right,left和int value”字段,外部类BinaryTree有一个字段 - Node root。
插入代码:
public void insert(int number) {
if (root.isEmpty())
root.value = number;
else {
Node node = root;
insert(number, node);
}
}
private void insert(int number, Node node) {
if (number < node.value && node.left != null) {
node = node.left;
insert(number, node);
} else {
if (node.left == null)
node.left = new Node(null, null, number);
}
if (number > node.value && node.right != null) {
node = node.right;
insert(number, node);
} else {
if (node.right == null)
node.right = new Node(null, null, number);
}
}
我做错了什么?
答案 0 :(得分:1)
假设您有一个名为X的节点作为root。 你正在插入一些号码
if (number < node.value && node.left != null) {
node = node.left; // NODE IS NOW Y
insert(number, node);
}
现在进入下一个if语句
if (number > node.value && node.right != null) {
node = node.right;
insert(number, node);
} else {
if (node.right == null)
node.right = new Node(null, null, number);
}
节点现在等于Y并且没有子节点。所以node.right == null。所以这个号码被重新插入为Y的孩子。
因此存在该号码的副本。使用return来解决它。
private void insert(int number, Node node) {
if (number < node.value && node.left != null) {
node = node.left;
insert(number, node);
return;
}
else {
if (node.left == null)
node.left = new Node(null, null, number);
return;
}
if (number > node.value && node.right != null) {
node = node.right;
insert(number, node);
return;
}
else {
if (node.right == null)
node.right = new Node(null, null, number);
return;
}
}