层次遍历:根据队列的原理,先将根节点入队,在出队,再将根节点的左右孩子入队,先出左孩子,在入左节点的左右孩子,再出右节点,再入右节点的左右孩子,再出..知道队列为空。
得到结果:1 2 3 4 5 6 7
C代码:
#include<stdio.h>
#include<stdlib.h>
#define TElemType int
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(BiTNode** a){
return a[front++];
}
//输出函数
void displayNode(BiTree node){
printf("%d ", node->data);
}
int main() {
BiTree 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);
}
}
getchar();
return 0;
}
运行结果: