我们知道,树是有层次的,比如:
图 1 二叉树的层次
上面这棵树一共有 3 层,根结点位于第一层,以此类推。
所谓层次遍历二叉树,就是从树的根结点开始,一层一层按照从左往右的次序依次访问树中的结点。
二叉树的存储方式有两种,分别是顺序表和链表。对于顺序表存储的二叉树,层次遍历是很容易实现的,因为二叉树中的结点本就是一层一层存储到顺序表中的。唯一需要注意的是,顺序表存储的只能是完全二叉树,普通二叉树必须先转换成完全二叉树后才能存储到顺序表中,因此在实现层次遍历的时候,需要逐个对顺序表中存储的结点进行甄别。
层次遍历用链表存储的二叉树,可以借助队列存储结构实现,具体方案是:
- 将根结点入队;
- 从队列的头部提取一个结点并访问它,将该结点的左孩子和右孩子依次入队;
- 重复执行第 2 步,直至队列为空;
假设将图 1 中的二叉树存储到链表中,那么层次遍历的过程是:
根结点 1 入队(1); 根结点 1 出队并访问它,然后将 1 的左孩子 2 和右孩子 3 依次入队(3, 2); 将结点 2 出队并访问它,然后将 2 的左孩子 4 和右孩子 5 依次入队(