题目描述:
输入一个整数n(n <= 100000),表示二叉树中节点个数,编号为1~n。约定1号节点为二叉树的根节点。然后输入n行,每行包括两个整数,第i行表示编号为i的节点的左子节点和右子节点的编号。如果某个节点没有左子节点,那么对应输行的第一个整数为0;如果某个节点没有右子节点,那么对应行的第二个整数为0。
先序遍历输出此二叉树每个节点的编号,每行输出一个编号。
先序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、前序遍历、前序周游,可记做根左右。前序遍历首先访问根节点然后遍历左子树,最后遍历右子树。
输入
第一行:一个整数n
接下来n行,每行有两个整数
输出
输出n行,每行一个整数,表示节点编号。
输入样例
5
2 5
3 4
0 0
0 0
0 0
输出样例
1
2
3
4
5
AC代码:
import java.util.Scanner;
public class code01 {
//定义节点
public static class heronode{
//定义编号
private int no;
//定义左边的编号
private heronode left;
//定义右边的编号
private heronode right;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//定义节点数组
heronode[] hero = new heronode[1000010];
//把每一个都设为编号
for (int i = 0; i <= n; i++) {
hero[i]=new heronode();
//对应几号,就设置几号
hero[i].no=i;
}
//输入i序号的左右子树对应的两个编号
for (int i = 1; i <= n; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
//对应左边的编号
hero[i].left=hero[a];
//对应右边的编号
hero[i].right=hero[b];
}
//从1号开始先序遍历
DLR(hero[1]);
}
//递归形式的先序遍历
private static void DLR(heronode h) {
if (h.no!=0) {
//输出根
System.out.println(h.no);
//输出左子树
DLR(h.left);
//输出右子树
DLR(h.right);
}
}
}
新创建一个公众号 Rockey小何同学 想相互交流的同学可以关注一下哈! 感谢支持!


