Как заменить информацию в уже существующем узле, не потеряв его потомков? - PullRequest
0 голосов
/ 17 мая 2019

Итак, я реализовал бинарное дерево поиска и управлял методом вставки, который работает. Все узлы содержат информацию о курсах с кодом курса, именем курса и кредитными курсами. Скажем, я хочу вставить новый узел, который имеет тот же ключ (код курса), но другие кредиты, но он не складывается. Кажется, что мое дерево теряет детей узла, который я изменил.

Я пытался написать «узел» вместо «корень» для случая, когда ключи равны, но потом он потерял дочерние элементы, как я уже говорил.

public void insert(String courseCode, String courseName, double courseCredits) {
    BSTNode node = new BSTNode(courseCode, courseName, courseCredits);  
    root = insert(root, node);  
}

private BSTNode insert(BSTNode root, BSTNode node) {
    if (root==null) {
        return node;
    } else {
        String currentKey = root.getCourseCode();
        BSTNode left = root.getLeftChild();
        BSTNode right = root.getRightChild();
        if (node.getCourseCode().compareTo(currentKey) < 0) {
            left = insert(left, node);
        } else if (node.getCourseCode().compareTo(currentKey) > 0) {
            right = insert(right, node);  //Ändrade "left" till "right" i parentesen.
        } else {
            return root; 
        }

        root.setChildren(left, right);
        return root;
    }
}

1 Ответ

0 голосов
/ 17 мая 2019

Просто замените courseName и courseCredits текущего узла:

...
if (root==null) {
    root.setCourseName(node.getCourseName());
    root.setCourseCredits(node.getCourceCredits());
    return node;
} else {
    ...
    } else {
        root.setCourseName(node.getCourseName());
        root.setCourseCredits(node.getCourceCredits());
        return root; 
    }
    ...
...