首先介绍下二叉树的层次遍历即按照顺序对树节点依次访问,如下图:
顺序遍历的结果为:ABCDEFGHIJK
我们可以借助一个队列来实现二叉树的层次遍历;思路如下:
先将二叉树根节点入队,然后出队,访问该节点,如果有左子树,则将左子树根节点入队;如果有右子树,则将右子树根节点入队。然后出队,对出队节点访问,如此循环
直到队列为空。
代码实现:
//
// Created by Administrator on 2018/6/5.
//
/**
* 层次遍历:通过辅助队列实现二叉树的层次遍历
*/
#include "stdio.h"
#include "stdlib.h"
/**
* 定义一棵树
*/
typedef struct {
char data;
struct BitTreeNode *lchild, *rchild;
} BitTreeNode, *BitTree;
/**
* 定义一个队列节点
*/
typedef struct {
BitTree data;//节点元素
struct QNode *next;//节点指向下一个节点的指针域
} QNode;
/**
* 定义一个队列:链式队列
*/
typedef struct {
//队列的头指针,尾指针:头指针始终指向头节点,尾指针随着元素入队向后移动
// 如果队列为空则头指针=尾指针同时指向头节点
QNode *front, *rear;
} LinkQueue;
/**
* 前序法创建树
* @param tree
* @return
*/
BitTree createTree(BitTree tree) {
char c;
scanf("%c", &c);
if (c