前言
前面我们学习的几种遍历方式主要有:前序遍历,中序遍历,层序遍历。这几种遍历方式都是采用递归进行实现的,而今天学习的层序遍历采取的是非递归的方式进行实现,主要是迭代的方式进行实现,同时需要使用队列结构进行辅助实现。
层序遍历
层序遍历其实也可以称为广度优先遍历,就是只按照顺序依次往下进行遍历的过程。
层序遍历的思想:利用一个队列结构进行辅助实现,首先判断对应的树是否为空树,如果为空树,则直接返回,如果不为空树,则先将根节点的值入队列,进行循环遍历,当队列不为空时,先取出队头元素,再将队头元素出队列,此时可以先访问取出的队头元素中存储的值,再判断队头元素是否存在左右子树,若存在左子树,则将左子树入队列,若存在右子树,则将右子树入队列。再进行下一轮循环
- 代码实现
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 树的结构
typedef int TreeDataType;
// 树的结点
typedef struct TreeNode
{
TreeDataType val;
struct TreeNode* left;
struct TreeNode* right;
};
typedef TreeNode* QDataType;
// 定义队列中结点的结构
typedef struct QueueNode
{
QDataType data;
struct QueueNode* next;
}QueueNode;
typedef struct Queue
{
QueueNode* front;
QueueNode* tail