You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的二叉搜索树(BST)实现中的insert()方法存在什么问题?

问题诊断
  • 值传递逻辑错误:Java 只有值传递,你在insertRec方法内对形参current直接赋值current = newNode,仅会修改当前方法栈中的局部变量副本,完全不会修改原树的root属性或者父节点的left/right属性,该赋值对原树没有任何实际效果。
  • 插入方向逻辑错误:大小比较对应的插入方向写反:当current.compareTo(newNode) > 0时,说明当前节点值大于新节点,新节点应该插入到当前节点的左子树,而非右子树;反之小于的时候才需要插入右子树。
修复方案

将递归方法改为返回节点类型,通过返回值把新节点/修改后的节点赋值给父节点的对应指针,同时修正插入方向即可,修复后代码如下:

public class BST<E extends Comparable<E>> {

    private class BSTNode implements Comparable<BSTNode> {

        public E data;
        public BSTNode left;
        public BSTNode right;

        public BSTNode(E data) {
            this.data = data;
        }

        @Override
        public int compareTo(BSTNode o) {
            return this.data.compareTo(o.data);
        }
    }

    public BSTNode root;

    public void insert(E data) {
        root = insertRec(root, new BSTNode(data));
    }

    private BSTNode insertRec(BSTNode current, BSTNode newNode) {
        if (current == null) {
            return newNode;
        }
        if (current.compareTo(newNode) > 0) {
            // 当前节点更大,新节点插入左子树
            current.left = insertRec(current.left, newNode);
        }
        else if (current.compareTo(newNode) < 0) {
            // 当前节点更小,新节点插入右子树
            current.right = insertRec(current.right, newNode);
        }
        // 节点值相等的情况默认不插入重复值,直接返回原有节点
        return current;
    }
}

内容的提问来源于stack exchange,提问作者guest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:36:03