Двоичное дерево не вставляется справа от любого узла, который является левым потомком другого узла - PullRequest
0 голосов
/ 04 декабря 2011

Мой текущий метод вставки для моего двоичного дерева не вставляет справа от любого узла, который является левым потомком его родителя.текущий код:

private BinaryTreeNode insert(BinaryTreeNode current, String word) {
    if (current == null) {
        current = new BinaryTreeNode(word);
    } else {
        if (word.compareToIgnoreCase(current.value) < 0) { // if smaller than current node
            if (current.left != null) {
                if (word.compareToIgnoreCase(current.left.value) < 0) {// check next node for lesser than,
                    current.left = (insert(current.left, word));
                }
            } else {
                current.left = new BinaryTreeNode(word);// iff current node is end of tree
                System.out.println(word + "left");
            }
        } else {
            if (current.right != null) { // if larger than current node
                current.right = (insert(current.right, word));
            } else {
                current.right = new BinaryTreeNode(word); // if current node is end of tree
                System.out.println(word + "right");
            }
        }
    }
    return current;
}

Ответы [ 3 ]

0 голосов
/ 04 декабря 2011

Вы должны рекурсировать, вместо того, чтобы идти вниз, чтобы сравнить влево:

private static BinaryTreeNode insert(BinaryTreeNode current, String word) {
    if (current == null) {
        current = new BinaryTreeNode(word);
    } else {
        int test = word.compareToIgnoreCase(current.value);
        if (test < 0) {
            current.left = insert(current.left, word);
        } else if (test > 0) {
            current.right = insert(current.right, word);
        }
        // else word already at this node!
    }
    return current;
}

Обратите внимание, что функция должна быть статической, поскольку она не зависит от this.

0 голосов
/ 04 декабря 2011

Я думаю, что были некоторые ошибки ... Я бы сделал что-то вроде этого:

private void insert(BinaryTreeNode current, String word) {
    if (current == null) {
        current = new BinaryTreeNode(word);
    } else {
        if (word.compareToIgnoreCase(current.value) < 0) {

            if (current.left != null) {
                insert(current.left, word);
            } else {
                current.left = new BinaryTreeNode(word);
                System.out.println(word + "left");
            }

        } else {

            if (current.right != null) {
                insert(current.right, word);
            } else {
                current.right = new BinaryTreeNode(word); 
                System.out.println(word + "right");
            }

        }
    }
}
0 голосов
/ 04 декабря 2011

Ваша проблема лежит здесь:

if (word.compareToIgnoreCase(current.left.value) < 0) {// check next node for lesser than,
    current.left = (insert(current.left, word));
}

Что вы ожидаете от этого? Вы уже знаете, что должны вставлять слева от текущего узла, но почему вы перепроверяете следующий узел здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...