摘要:时间限制:1s空间限制:32000KB标题级别:Silver Silver查看运行结果标题描述查找二叉树的前序遍历、中序遍历和后序遍历输入描述InputDescription第一行中的整数n,表示树的节点数。接下来的n行每行有2个整数L和R。第i行中的两个整数Li和Ri表示编号为i的节点的左侧和右侧子编号。样本输入SampleInput52345000000样本输出SampleOutput124534251345231数据范围和提示DataSize&Hintn˂=16代码:#includedesignamespacestd#includestructTree{intdata,child[3];};树[17];Void xx{printf;forif(tree[i].child[j]!Zx;printf;//如果没有左边的子级,则输出当前的点标记,If(tree[i].chile[2]!=0)Zx;//然后访问右边的子级。访问右边的孩子时,还应该访问它的左边子级return;}intmain(){intn;scanf;for{tree[i].data=i;scanf!}xx;printf(“”);zx;printf(“”);hx;printf(“”);return0;}
时间限制: 1 s
空间限制: 32000 KB
题目等级 : 白银 Silver
查看运行结果
题目描述 Description
求一棵二叉树的前序遍历,中序遍历和后序遍历
输入描述 Input Description
第一行一个整数n,表示这棵树的节点个数。
接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。
输出描述 Output Description
输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。
样例输入 Sample Input
5
2 3
4 5
0 0
0 0
0 0
样例输出 Sample Output
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1
数据范围及提示 Data Size & Hint
n <= 16
代码:
#include
using namespace std;
#include
struct Tree{
int data,child[3];
};
Tree tree[17];
void xx(int i)
{
printf("%d ",tree[i].data);
for(int j=1;j<=2;++j)
if(tree[i].child[j]!=0)
xx(tree[i].child[j]);
}
void hx(int i)
{
for(int j=1;j<=2;++j)
if(tree[i].child[j]!=0)
hx(tree[i].child[j]);
printf("%d ",tree[i].data);
}
void zx(int i)
{
if(tree[i].child[1]!=0)//如果有左孩子,就一直找。
zx(tree[i].child[1]);
printf("%d ",tree[i].data);//如果没有左孩子,就输出当前点标号,
if(tree[i].child[2]!=0)
zx(tree[i].child[2]);//再去访问右孩子,访问右孩子时,也是先访问它的左孩子
return ;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
tree[i].data=i;
scanf("%d%d",&tree[i].child[1],&tree[i].child[2]);
}
xx(1);
printf(" ");
zx(1);
printf(" ");
hx(1);
printf(" ");
return 0;
}