概述
这两天在看树的部分,先总结一下二叉树。
什么是树?
树也是一种数据结构,是由n个结点组成的具有层次关系的集合。树由根结点和子节点组成,与现实生活中的树不同,这里的树,根结点是在最上面的,叶子结点在下面,就像是将现实中的树倒着挂起来一样。
树的特点:
- 每个结点有零个或多个子结点。
- 每一个子结点只有一个父结点。
- 没有前驱的结点称为根结点,没有子结点的结点为叶子结点。
- 除根结点外,每个子结点可分为m个不相交的子树。
什么是二叉树?
二叉树特点是每个结点最多有两个子结点。
树和二叉树的区别:
- 树中的结点个数至少为1,而二叉树中的结点个数可以为0;
- 树中结点的度没有限制,而二叉树中结点的最大度为2.
二叉树的实现:
这里二叉树的创建时采用递归的方式,并且每次创建的都是根节点,采用的是前序遍历的方式。
<span style="font-size:18px;">#include <stdio.h>
#include <stdlib.h>
typedef char TElemType;
typedef struct BiNode {
TElemType data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
//创建二叉树
BiTree createBiTree(BiTree *T) {
TElemType ch;
scanf("%c",&ch);
if(ch=='#') {
*T = NULL;
}else {
*T = (BiTree)malloc(sizeof(BiNode));
if(!*T)
exit(-1);
(*T)->data = ch;
createBiTree(&(*T)->lchild);
createBiTree(&(*T)->rchild);
}
return T;
}
//前序遍历
void preorderTraverse(BiTree T) {
if(T==NULL)
return;
printf("%c",T->data);
preorderTraverse(T->lchild);
preorderTraverse(T->rchild);
}
//中序遍历
void InorderTraverse(BiTree T) {
if(T){
InorderTraverse(T->lchild);
printf("%c",T->data);
InorderTraverse(T->rchild);
}
}
//后序遍历
void PostorderTraverse(BiTree T) {
if(T) {
PostorderTraverse(T->lchild);
PostorderTraverse(T->rchild);
printf("%c",T->data);
}
}
int main()
{
BiTree t;
createBiTree(&t);
printf("%sn","前序遍历");
preorderTraverse(t);
printf("n");
printf("%s","中序遍历");
printf("n");
InorderTraverse(t);
printf("n");
printf("%sn","后序遍历");
PostorderTraverse(t);
return 0;
}
</span>
最后
以上就是单身手机为你收集整理的数据结构与算法——二叉树的创建与遍历的全部内容,希望文章能够帮你解决数据结构与算法——二叉树的创建与遍历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复