您的位置:首页 > 理论基础 > 数据结构算法

数据结构----二叉树----建立与遍历

2016-10-02 10:14 387 查看
一、题目描述

二叉树的建立与遍历(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

 

 

二、分析

我们发现题目已经把每一个二叉树的节点都编了号,我们只需要建立tree结构的结构体就可以了。

struct node{

int fa,l,r;//记录父亲,左儿子和右儿子

};

node tree[105];

用vis[]数组来记录谁不是任何人的儿子(即树根),在输入的时候把儿子记录下来,再判断树根

用结构体模拟出树的结构。

 int n,i,x,y,z;

 scanf("%d",&n);

 for(i=1;i<=n;i++){

 scanf("%d%d%d",&x,&y,&z);

 vis[y]=1;vis[z]=1;//记录儿子

 tree[x].l=y;tree[x].r=z;

 tree[y].fa=x;tree[z].fa=x;//构造二叉树

 }

 for(i=1;i<=n;i++){

 if(vis[i]==0)

 root=i;//判断树根

 }

接下来就对二叉树进行遍历。

 printf("%d\n",root);

 xxbl(root);//先序遍历

 printf("\n");

 zxbl(root);//中序遍历

 printf("\n");

 hxbl(root);//后序遍历

遍历函数:

void xxbl(int g)//先序遍历

{

if(g){//判断该节点是否为空

printf("%d ",g);

xxbl(tree[g].l);

xxbl(tree[g].r);//递归(深搜)

}

}

接下来的中序遍历和后序遍历就以此类推。

总之这道题比较简单。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐