按+/-号左右插入字符串的二叉树实现报空指针错误如何解决
问题原因与修复方案
存在的错误点
- 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
相关产品推荐
相关产品推荐

