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

按+/-号左右插入字符串的二叉树实现报空指针错误如何解决

问题原因与修复方案

存在的错误点

  • Node类的sign字段未初始化:你当前使用的单参数Node构造方法仅为data赋值,sign字段始终为null,后续调用r.sign.equals(passSign)时直接触发空指针异常。
  • 插入逻辑不符合需求:
    • 两个if分支判断条件完全重复,没有区分"+"插入左子树、"-"插入右子树的规则
    • 逻辑判断方向错误:不需要比对当前节点的sign和传入符号,直接根据传入的符号决定新节点插入的位置即可
  • 存在冗余字段:类中定义的静态sign变量没有任何作用,可以直接删除。

修正后的代码

public class BinaryTree {
    
    private static Node root = null;

    public static void main(String[] args) {
        BinaryTree bt = new BinaryTree();
        bt.insert("to", "-");
        bt.insert("the", "+");
        bt.preorder();
    }
    
    private class Node {
        String data;
        Node left;
        Node right;
        
        public Node(String w) {
            data = w;
            left = right = null;
        }
    }
    
    private void insert(String val, String sign) {
        root = insert(root, val, sign);
    }
    
    Node insert(Node r, String data, String passSign) {
        if (r == null) {
            return new Node(data);
        }
        // 按符号判断插入左/右子树
        if("+".equals(passSign)) {
            r.left = insert(r.left, data, passSign);
        } else if ("-".equals(passSign)){
            r.right = insert(r.right, data, passSign);
        }
        return r;
    }
    
    public void preorder() {
        preorder(root);
    }
    
    public void preorder(Node p) {
        if (p != null) {
            System.out.println(p.data);
            preorder(p.left);
            preorder(p.right);
        }
    }
}

运行说明

修正后执行main方法的前序遍历输出为:

to
the

符合插入逻辑:第一个插入的"to"作为根节点,第二个传入"+"符号,插入到根节点的左子树位置。

内容的提问来源于stack exchange,提问作者spock's-neurons

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:04