当前位置:   article > 正文

数据结构 二叉树层次遍历 C语言_c语言层次遍历输出二叉树每一层的所有结点

c语言层次遍历输出二叉树每一层的所有结点

C语言 数据结构 二叉树层次遍历

原创作者:小林
#include<stdio.h>
#include<stdlib.h>
#define max 100

typedef int ElemType;

typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BinTree;

//建立二叉树

void CreateBinTree(BinTree &T){ //按先序次序输入,构造二叉链表表示的二叉树T
int num;
scanf("%d",&num);//输入函数。
if(num==-1){
T=NULL;
}//输入#时为空
else{
T=(BinTree)malloc(sizeof(BiTNode));
T->data=num;
CreateBinTree(T->lchild);
CreateBinTree(T->rchild);
}
}

// 遍历二叉树
void LevleOrder(BinTree T){ //从第一层开始,从左到右

BinTree Queue[max],p; //用一维数组表示队列,front和rear分别表示队首和队尾指针

int front,rear;

front=rear=0;

if (T) //若树非空
{

Queue[rear++]=T; //根结点入队列

while (front!=rear){ // 队列非空
p=Queue[front++]; // 队首元素出队列,并访问这个结点
printf("%d",p->data);

if (p->lchild!=NULL) Queue[rear++]=p->lchild; //左子树非空,入队列
if (p->rchild!=NULL) Queue[rear++]=p->rchild;
}
}

}

//按要求输出二叉树

int main() {

BinTree T;

printf("\n创建二叉树\n");
CreateBinTree (T);
printf("\n层次遍历二叉树 并输出遍历结果\n"); LevleOrder(T);

return 0; }

例题:
二叉树的层次遍历
关于二叉树的遍历方法,除了我们所熟知的先序遍历、中序遍历和后序遍历方法外,还有一种遍历方法,称为层次遍历。所谓层次遍历方法是指从二叉树的根结点开始自上而下,每一层从左到右逐一访问每个结点。例如,若二叉树如下所示。
在这里插入图片描述

则该二叉树的层次遍历序列为:1 2 3 5 6 7 10 11 13
假设二叉树采用二叉链表存储结构,其二叉链表的类型定义如下。
typedef struct bnode{
int data; //结点的数据域用大于0的整数表示
struct bnode *lchild;
struct bnode *rchild;
}bnode,*btree;
要求:
首先采用先序遍历的方法来创建一棵二叉树,创建时用-1来表示空树。最后输出所创建二叉树的层次遍历序列。
例如,如果要创建上图所示的二叉树:
应输入:
1 2 -1 5 10 -1 -1 11 -1 -1 3 6 -1 13 -1 -1 7 -1 -1
则输出:
1 2 3 5 6 7 10 11 13

运行结果如下:在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/551320
推荐阅读
相关标签
  

闽ICP备14008679号