数据结构----二叉树----建立与遍历
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);//递归(深搜)
}
}
接下来的中序遍历和后序遍历就以此类推。
总之这道题比较简单。
二叉树的建立与遍历(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);//递归(深搜)
}
}
接下来的中序遍历和后序遍历就以此类推。
总之这道题比较简单。
相关文章推荐
- SDUTOJ 1291 数据结构之二叉树的建立与遍历(带返回值,指针引用,数组模拟3种方式)
- 数据结构 二叉树的建立 与各种遍历
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 数据结构:二叉树的建立和遍历(C#实现)
- 数据结构与算法问题 二叉树的建立与遍历(含非递归)
- 数据结构 二叉树的建立与遍历
- 数据结构----二叉树(1)遍历,建立,应用
- 数据结构(十一)——二叉树的遍历和建立
- 20170513_一步一步写数据结构(二叉树的建立和遍历)
- 二叉树是笔试面试中考试最频繁的数据结构之一,主要包括,程序建立一个二叉树,三种次序遍历二叉树,返回叶子节点的数目,求二叉树节点的总数等。建立一个二叉树节点的数据结构
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- python数据结构--二叉树建立与遍历
- 二叉树节点数据结构-练习 5 二叉树的建立 遍历
- 数据结构之二叉树(遍历、建立、深度)
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- [算法与数据结构] - No.7 二叉树建立及其前序、中序、后序遍历
- 常用数据结构-二叉树的链式存储、建立和遍历
- 基本数据结构——二叉树的建立,遍历,求叶子节点,深度计算
- 数据结构试验-试验7二叉树的建立与遍历