【暂无】二叉树 二叉树的三种遍历(binary-tree.cpp)

来源:互联网 发布:hl线切割编程系统 编辑:程序博客网 时间:2024/06/07 18:03

二叉树的建立与遍历(binary-tree)

题目描述
给出一棵二叉树,分别输出先序、中序、后序遍历结果。

输入
第1行:结点数n(1<=n<=100)

以下若干行,每行3个整数,分别表示父结点、左孩子、右孩子。若没有孩子,对应的整数为0.

输出
第1行:树根

第2行:先序遍历结果,数字间用1个空格分开。

第3行:中序遍历结果,数字间用1个空格分开。

第4行:后序遍历结果,数字间用1个空格分开。

样例输入
8
1 2 4
2 0 0
4 8 0
3 1 5
5 6 0
6 0 7
8 0 0
7 0 0
样例输出
3
3 1 2 4 8 5 6 7
2 1 8 4 3 6 7 5
2 8 4 1 7 6 5 3

    这道题其实很像深搜,但是有三种输出,所以要写三个深搜,至于根节点,就是唯一一个没有父亲的啦~AC代码:

#include<cstdio>struct Tree{int f;int l,r;}tree[105];int n,g,c;void fron(int x){if(c==1){printf(" ");}printf("%d",x);c=1;if(tree[x].l){fron(tree[x].l);}if(tree[x].r){fron(tree[x].r);}}void midd(int x){if(tree[x].l){midd(tree[x].l);}if(c==1){printf(" ");}printf("%d",x);c=1;if(tree[x].r){midd(tree[x].r);}}void back(int x){if(tree[x].l){back(tree[x].l);}if(tree[x].r){back(tree[x].r);}if(c==1){printf(" ");}printf("%d",x);c=1;}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){int a,b,c;scanf("%d %d %d",&a,&b,&c);tree[a].l=b;tree[a].r=c;tree[b].f=tree[c].f=a;}for(int i=1;i<=n;i++){if(tree[i].f==0){g=i;break;}}printf("%d\n",g);fron(g);printf("\n");c=0;midd(g);printf("\n");c=0;back(g);printf("\n");}


 

1 0