题目描述
输入一串二叉树,输出它的前序遍历、中序遍历、后序遍历。
输入格式
第一行为二叉树的结点数 n(1≤n≤100)
之后 n 行,每行包含 3 个整数,分别为当前结点序号,以及其左右儿子序号,空格隔开。(−1 表示空结点)
保证:
-
这 n 行数据依次对应第 1 个点至第 n 个点;
-
第 1 个点为二叉树的根结点。
输出格式
共三行,分别为前序遍历、中序遍历、后序遍历的序列。
每行有 n 个数据,为结点编号,数据之间用 1 个空格隔开。
样例输入 #1
5
1 2 3
2 4 5
3 -1 -1
4 -1 -1
5 -1 -1
样例输出 #1
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1
#include<bits/stdc++.h>
using namespace std;
struct node
{
int data,left,right;
}a[100+7];
void pre(int x)
{
cout<<x<<" ";
if(a[x].left!=-1)
{
pre(a[x].left);
}
if(a[x].right!=-1)
{
pre(a[x].right);
}
}
void per(int x)
{
if(a[x].left!=-1)
{
per(a[x].left);
}
cout<<x<<" ";
if(a[x].right!=-1)
{
per(a[x].right);
}
}
void rpe(int x)
{
if(a[x].left!=-1)
{
rpe(a[x].left);
}
if(a[x].right!=-1)
{
rpe(a[x].right);
}
cout<<x<<" ";
}
int main()
{
int n,id,l,r,x;
cin>>n;
memset(a,-1,sizeof(a));
for(int i=1;i<=n;i++)
{
cin>>id>>l>>r;
a[id].data=id;
a[id].left=l;
a[id].right=r;
}
pre(1);
cout<<endl;
per(1);
cout<<endl;
rpe(1);
return 0;
}
代码如上
附自编符号枪
/*
%%%%%%%%%%%
%%%%%%%%%%%
$$$$$
@@@@@@@@@@@@@@@@
################################%%%%%%%%%%%%%%%%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&@
############################### ###############################################################▅▅▅▅▅▅▅▅▅▅▅▅##################*
################################# #################################################################▅▅▅▅▅▅▅▅▅▅▅▅##################*
########################################\ > / ^^^^^^^^^^^^^^^^^^^^^^^^^^
######################### \ > /
####################### ---
#####################
*/