遍历二叉树指的是按照某种规律依次访问二叉树的每个节点, 对二叉树的遍历过程就是 将非线性结构的二叉树中的节点排列成线性序列的过程。
如果采用线性结构来保存二叉树,程序遍历二叉树将非常容易,无需进行任何思考,直接遍历底层数组即可。如果采用链表来保存二叉树的节点,则有以下两种遍历方式:
1.深度优先遍历
因为二叉树的定义本身就有“递归性”,所以深度优先遍历时能非常方便地利用递归来遍历每个节点:一颗非空二叉树由根、左子树、右子树组成,依次遍历这三部分,就可以遍历整棵二叉树。
非递归算法可借助栈。
1)先序遍历
2)中序遍历
3)后序遍历
2.广度优先(按层)遍历
1.先序遍历
1)访问根节点
2)递归遍历左子树
3)递归遍历右子树
2.中序遍历
1)递归遍历左子树
2)访问根节点
3)递归遍历右子树
3.后序遍历
1)递归遍历左子树
2)递归遍历右子树
3)访问根节点
4.广度优先(按层)遍历 借助队列实现。1)建一个队列,树的根节点入队
2)从队列中弹出一个节点,然后将该节点的左右节点入队。如果没有子节点说明已经到达叶子节点。
3)重复执行2)直到队列为空