java - 如何替换现有节点中的信息而不丢失其子节点?

标签 java insert binary-search-tree

所以我实现了一个二叉搜索树,并且管理了一个有效的插入方法。所有节点都包含有关类(class)的信息,包括类(class)代码、类(class)名称和类(class)学分。 假设我想插入一个具有相同 key (类(class)代码)但不同类(class)学分的新节点,那么它不会相加。看来我的树失去了我更改的节点的子节点。

在键相等的情况下,我尝试写“节点”而不是“根”,但它会像我之前所说的那样丢失子节点。

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

最佳答案

只需替换当前节点的courseNamecourseCredits即可:

...
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; 
    }
    ...

关于java - 如何替换现有节点中的信息而不丢失其子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183320/

相关文章:

Java JVMTI 代理在 GetEnv() 上崩溃

php session 购物车使用插入记录项目数量两次

c++ - 二进制搜索树键/值对 - 我知道值但不知道键 C++

algorithm - 嵌套二叉搜索树的复杂性

java - 计算叶图中的节点数

java - 如何在 Wicket DropDownChoice 中将值设置为默认选择

java - 如何将 jasper 报告从 xalan 切换到 saxon?

java - Elastic 6.5 不支持 IndexRequest

php - 使用 PHP 获取最后插入的 auto_incrementID MySQL

javascript - 通过 JavaScript 在 ins 标签内更改值