二叉树的序遍历

题目描述

求一棵二叉树的前序遍历,中序遍历和后序遍历。

输入输出格式

输入描述:

第一行一个整数n,表示这棵树的节点个数。

接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。

输出描述:

输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。

输入输出样例

输入样例#1:

5

扫描二维码关注公众号,回复: 2039755 查看本文章

2 3

4 5

0 0

0 0

0 0

输出样例#1:

1 2 4 5 3

4 2 5 1 3

4 5 2 3 1

思路

递归。先写好先序,再将先序略微改动,复制粘贴三遍即可。

代码

复制代码
#include<stdio.h>
int a[100],b[100];
void A(int i)
{
    printf("%d ",i);
    if(a[i])
      A(a[i]);
    if(b[i])
      A(b[i]);
}
void B(int i)
{
    if(a[i])
      B(a[i]);
    printf("%d ",i); 
    if(b[i])
      B(b[i]);
}
void C(int i)
{
    if(a[i])
      C(a[i]);
    if(b[i])
      C(b[i]);
    printf("%d ",i);
}
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
      scanf("%d%d",&a[i],&b[i]);
    A(1);
    printf("\n");
    B(1);
    printf("\n");
    C(1);
    return 0;
}

猜你喜欢

转载自www.linuxidc.com/Linux/2016-03/129176.htm