[输入形式]
首先输入一个 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 + " ");
}
}
}
为什么我的程序一直创建左子树不报错,创建右子树就会报空指针错误,求大神指点
1
luckyrayyy 2020-05-06 00:30:25 +08:00
“为什么我的程序一直创建左子树不报错,创建右子树就会报空指针错误”没看懂你的提问
|
2
lm66058 OP |
3
luckyrayyy 2020-05-06 00:50:18 +08:00 via iPhone 1
@lm66058 你的 find 方法返回值有可能是 null,然后 CreteTree 方法里的有可能是 null,你再给 t 的属性赋值可不就空指针了
|
4
lm66058 OP @luckyrayyy 可是输入 5 6 之前数值为 5 的结点已经初始化并赋值了,为什么还是会报空指针错误,我把全部代码上传了,大佬帮我看看哪里出问题了
|
5
lm66058 OP @luckyrayyy 感谢大神指点迷津,已经解决了
|
6
luckyrayyy 2020-05-06 08:58:34 +08:00
@lm66058 这种问题实在太低级了,你看错误日志,肯定会告诉你哪一行空指针了,你就看那一行里哪有可能为 null 。另外针对你这种简单的逻辑,其他 IDE 不知道,至少 idea 就会提醒你有可能出现空指针,你肯定没看 ide 的 warn 。希望能解决渔的问题而不只是鱼的问题。
|