9.二叉树的序遍历
发布日期:2022-03-13 05:36:07 浏览次数:7 分类:技术文章

本文共 1162 字,大约阅读时间需要 3 分钟。

二叉树的序遍历

时间限制: 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("\n");

       zx(1);

       printf("\n");

       hx(1);

       printf("\n");

       return 0;

}

转载于:https://www.cnblogs.com/csgc0131123/p/5290290.html

转载地址:https://blog.csdn.net/weixin_30323961/article/details/98175099 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring中加载xml配置文件的六种方式
下一篇:使用tensorflow进行简单的线性回归

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年02月29日 12时28分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章