赞
踩
原创作者:小林
#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
运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。