数据结构:链式二叉树创建与遍历详解
前言
上篇博客我们学习了链式结构的二叉树,从递归角度实现了二叉树的前中后序遍历以及各种有关二叉树的结点个数和高度等函数,今天我们来学习一个不使用递归的二叉树的层序遍历以及一些二叉树有关的算法题。
一、二叉树的层序遍历
二叉树的层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后从左到右访问第 2 层上的结点,接着是第三层的结点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。层序遍历还要借助我们的数据结构:队列。
有图才能有真相。
其实就是当前一层的结点入队列,然后一个一个出队列,出队列时把该节点的左右孩子入队列,这样下一个层级的结点就跟着上一层结点之后啦,重复这个操作,层序遍历就完成啦。
这是队列的结构以及一些函数的声明(这里把之前的 int 改成 BTNode 就好啦,队列里面的元素是二叉树的结点类型)。
typedef BTNode* QDataType;
struct QueueNode {
QDataType data;
struct QueueNode* next;
};
struct Queue {
QueueNode* phead;
QueueNode* ptail;
int size;
};
void QueueInit(Queue* pq);
void QueuePush(Queue* pq, QDataType x);
void QueuePop(Queue* pq);
bool QueueEmpty(Queue* pq);
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);
int QueueSize(Queue* pq);
void QueueDestory(Queue* pq);
void QueuePrint(Queue* pq);
借助队列实现层序遍历。


