概述
C数据结构-二叉树的层次遍历
- 二叉树层次遍历介绍
- 结构体的注解
- 代码注解
二叉树层次遍历介绍
二叉树有很多的遍历方式,层次遍历就是按照一层层做左至右进行遍历,不得不说C语言指针要好好的掌握,对着书上的结构体代码我也是懵比了一个下午阿,多跑跑就熟悉了。
最终的输出结果应该是1-2-3-4-5-6-7
结构体的注解
想来看不懂树的定义的人一定不止我一个!你看看这个代码,真的晦涩。
typedef struct BiTNode{
TElemType data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
莫慌,我来解释一下。
struct BiTNode *lchild,*rchild;//左右孩子指针
这个是指向BiTNode这个结构体的指针
代码的第4行又有一个BiTNode,是不是觉得很奇怪,这个BiTNode是给我们定义的结构体一个名称,在main中可以使用BiTNode tree这样子去使用,后面跟了个BiTree,这个BiTree是指向结构体BiTNode的结构体指针。太绕了,我这里放个链接,我觉得写的很棒。
链接: 关于我讲的原文链接.
代码注解
以下是文档中的例子,大家可以自己打印一下指针阿什么的,多跑跑,可以直接复制粘贴运行。
#include <stdio.h>
#include <stdlib.h>
#define TElemType int
//初始化队头和队尾指针开始时都为0
int front=0,rear=0;
typedef struct BiTNode{
TElemType data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T){
*T=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=1;
(*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->data=2;
(*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->rchild->data=5;
(*T)->lchild->rchild->lchild=NULL;
(*T)->lchild->rchild->rchild=NULL;
(*T)->rchild->data=3;
(*T)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->lchild->data=6;
(*T)->rchild->lchild->lchild=NULL;
(*T)->rchild->lchild->rchild=NULL;
(*T)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->rchild->data=7;
(*T)->rchild->rchild->lchild=NULL;
(*T)->rchild->rchild->rchild=NULL;
(*T)->lchild->lchild->data=4;
(*T)->lchild->lchild->lchild=NULL;
(*T)->lchild->lchild->rchild=NULL;
}
//入队函数
void EnQueue(BiTree *a,BiTree node){
a[rear++]=node;
}
//出队函数
BiTNode* DeQueue(BiTree *a){
return a[front++];
}
//输出函数
void displayNode(BiTree node){
printf("%d ",node->data);
}
int main() {
BiTree tree;
printf("tree---%dn",tree);
printf("&tree---%dn",&tree);
//初始化二叉树
CreateBiTree(&tree);
BiTNode * p;
//采用顺序队列,初始化创建队列数组
BiTree a[20];
//根结点入队
EnQueue(a, tree);
//当队头和队尾相等时,表示队列为空
while(front<rear) {
//队头结点出队
p=DeQueue(a);
displayNode(p);
//将队头结点的左右孩子依次入队
if (p->lchild!=NULL) {
EnQueue(a, p->lchild);
}
if (p->rchild!=NULL) {
EnQueue(a, p->rchild);
}
}
return 0;
}
最后
以上就是感性店员为你收集整理的C数据结构-二叉树的层次遍历二叉树层次遍历介绍结构体的注解代码注解的全部内容,希望文章能够帮你解决C数据结构-二叉树的层次遍历二叉树层次遍历介绍结构体的注解代码注解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复