二叉树插入3

时间:2012-12-09 01:09:35

标签: java

我正在尝试编写自己的二叉树,但是插入时遇到问题。树中的值是重复的。我有内部静态类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);
    }
}

我做错了什么?

1 个答案:

答案 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;
    }
}