求助关于 Java 创建二叉树的问题

2020-05-06 00:00:21 +08:00
 lm66058

[输入形式]

首先输入一个 n ( 0 到 n-1 编号)表示树中节点的个数,接下来 n-1 行每行有两个整数 a,b,表示 a 是 b 的父亲(建树统一先建左孩子后建右孩子),最后分别输出前序,中序,后续遍历的编号(每种遍历结果占一行,每行每个编号之间有一个空格,输出的第一个编号前没有空格,输出的最后一个编号后没有空格)。例如:4 个节点,1 是 0 的左孩子,2 是 0 的右孩子,3 是 1 的左孩子。

[输出形式]

输出前、中、后序遍历结果

[样例输入]

4

0 1

0 2

1 3

[样例输出]

0 1 3 2

3 1 0 2

3 1 2 0

核心代码:

public class Tree { int data; Tree lChild = null; Tree rChild = null;

public Tree(int data) {
    this.data = data;
}

public Tree() {
}

public Tree CreatTree(Tree tree, int flag, int child) {
    Tree t;
    t = find(tree, flag);
    if (t.lChild != null) {
        t.rChild = new Tree(child);
    } else {
        t.lChild = new Tree(child);
    }
    return tree;
}

private Tree find(Tree t, int data) {
    Tree temp;
    if (t != null) {
        if (t.data == data) {
            return t;
        } else {
            if (t.lChild != null) {
                temp = find(t.lChild, data);
                return temp;
            }
            if (t.rChild != null) {
                temp = find(t.rChild, data);
                return temp;
            }
        }
    }
    return null;
}

public void PreOrderTree(Tree t) {
    if (t != null) {
        System.out.print(t.data + " ");
        PreOrderTree(t.lChild);
        PreOrderTree(t.rChild);
    }

}

public void InOrderTree(Tree t) {
    if (t != null) {
        InOrderTree(t.lChild);
        System.out.print(t.data + " ");
        InOrderTree(t.rChild);
    }
}

public void LaOrderTree(Tree t) {
    if (t != null) {
        LaOrderTree(t.lChild);
        LaOrderTree(t.rChild);
        System.out.print(t.data + " ");
    }
}

}

为什么我的程序一直创建左子树不报错,创建右子树就会报空指针错误,求大神指点
938 次点击
所在节点    问与答
6 条回复
luckyrayyy
2020-05-06 00:30:25 +08:00
“为什么我的程序一直创建左子树不报错,创建右子树就会报空指针错误”没看懂你的提问
lm66058
2020-05-06 00:34:30 +08:00
@luckyrayyy 就是创建孩子结点时会报空指针错,比如按照样例输入的时候能正常输出,如果输入
5
0 1
1 2
1 5
5 6
输入到 5 6 的时候就会报空指针错误
luckyrayyy
2020-05-06 00:50:18 +08:00
@lm66058 你的 find 方法返回值有可能是 null,然后 CreteTree 方法里的有可能是 null,你再给 t 的属性赋值可不就空指针了
lm66058
2020-05-06 01:01:25 +08:00
@luckyrayyy 可是输入 5 6 之前数值为 5 的结点已经初始化并赋值了,为什么还是会报空指针错误,我把全部代码上传了,大佬帮我看看哪里出问题了
lm66058
2020-05-06 01:28:37 +08:00
@luckyrayyy 感谢大神指点迷津,已经解决了
luckyrayyy
2020-05-06 08:58:34 +08:00
@lm66058 这种问题实在太低级了,你看错误日志,肯定会告诉你哪一行空指针了,你就看那一行里哪有可能为 null 。另外针对你这种简单的逻辑,其他 IDE 不知道,至少 idea 就会提醒你有可能出现空指针,你肯定没看 ide 的 warn 。希望能解决渔的问题而不只是鱼的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668772

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX