二叉树作为FDS课程最核心的数据结构之一,要求每个人都掌握!
这是一道简单的二叉树问题!
我们将给出一颗二叉树,请你输出它的三种遍历,分别是先序遍历,中序遍历,后序遍历!
输入格式:
二叉树将以这样的形式给出:
第一行给出一个正整数N(N<=100),表示二叉树上的节点个数!
接下来N行,每行包含三个整数,i,l,r,分别代表第i个节点的左右孩子!
如果它的左/右孩子为空,则在对应位置给出-1!
题目保证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; }
|