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

一、题目描述

二叉树的建立与遍历(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);//递归(深搜)
}
}

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

总之这道题比较简单。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值