题目描述:
已知一棵二叉树,分别求它的先序编历,中序编历、后序编历(结点数N<=100)
输入格式:
第一行树结点个数,从第二行开始,每行三个数,第一个数是结点,第二个数是左孩子,第三个数是右孩子
输出格式:
第一行先序编历,第二行中序编历,第三行后序编历,数与数之间有一个空格
样例输入:
5
1 2 3
2 4 5
3 0 0
4 0 0
5 0 0
样例输出:
1 2 4 5 34 2 5 1 3
4 5 2 3 1
#include<iostream>
using namespace std;
struct XY{int l,r;}t[1010];
void dfs1(int x){
if (x==0) return ;
cout <<x<<' ';
dfs1(t[x].l);dfs1(t[x].r);
}
void dfs2(int x){
if (x==0) return ;
dfs2(t[x].l);
cout <<x<<' ';
dfs2(t[x].r);
}
void dfs3(int x){
if (x==0) return ;
dfs3(t[x].l);dfs3(t[x].r);
cout <<x<<' ';
}
int main(){
int n,xx;cin >>n;
for (int i=1;i<=n;++i)
cin >>xx>>t[i].l>>t[i].r;
dfs1(1);cout <<endl;//先序
dfs2(1);cout <<endl;//中序
dfs3(1);cout <<endl;//后序
return 0;
}