二叉树作为FDS课程最核心的数据结构之一,要求每个人都掌握!

这是一道简单的二叉树问题!

我们将给出一颗二叉树,请你输出它的三种遍历,分别是先序遍历,中序遍历,后序遍历!

输入格式:

二叉树将以这样的形式给出:

第一行给出一个正整数N(N<=100),表示二叉树上的节点个数!

接下来N行,每行包含三个整数,i,l,r,分别代表第i个节点的左右孩子!

如果它的左/右孩子为空,则在对应位置给出-1!

题目保证1是根节点!

输出格式:

请你输出它的三种遍历!

第一行输出先序遍历,第二行输出中序遍历,第三行输出后序遍历!

每行末尾无多余空格!

输入样例:

在这里给出一组输入。例如:

1
2
3
4
3
1 2 3
2 -1 -1
3 -1 -1

输出样例:

在这里给出相应的输出。例如:

1
2
3
1 2 3
2 1 3
2 3 1

思路:

​ 基本可以当做二叉树先中后序的板子题

​ 存储方式类似于第一题

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<bits/stdc++.h>
using namespace std;
const int N = 105;
struct Node{
int left;
int right;
};
int n,cnt;
Node node[N];
void Print(int t){
if(cnt++) putchar(' ');
cout << t;
if(cnt == n) cout << endl;
}
//先序
void PreOrder(int t){
if(t == -1) return;
Print(t);
PreOrder(node[t].left);
PreOrder(node[t].right);
}
//中序
void InOrder(int t){
if(t == -1) return;
InOrder(node[t].left);
Print(t);
InOrder(node[t].right);
}
//后序
void PostOrder(int t){
if(t == -1) return;
PostOrder(node[t].left);
PostOrder(node[t].right);
Print(t);
}
int main(){
cin >> n;
for(int i = 0; i < n; ++i){
int a,b,c;
cin >> a >> b >> c;
node[a].left = b;
node[a].right = c;
}
PreOrder(1);
cnt = 0;
InOrder(1);
cnt = 0;
PostOrder(1);
return 0;
}