遍利树策略
数据模型
- ArrayDeque(数组结构,不能存null,可作栈或双端队列)
- LinkedList(链式结构,可作栈或双端队列)
下图中的顶点按照访问的顺序编号,按照 1-2-3-4-5 的顺序来比较不同的策略。
广度优先遍利(BFS)
- 广度优先,即按照层序遍利
- 方案一
使用两层嵌套循环。外层循环迭代树的层级,内层循环迭代每层上的节点
- 方案二
可以使用一层循环实现 BFS。将要访问的节点添加到队列中,使用 分隔符(例如:空节点)把不同层的节点分隔开。分隔符表示一层结束和新一层开始。
深度优先遍利(DFS)
- 该策略以
深度
为优先级,从根
开始,一直到达某个确定的叶子节点
,然后再返回根到另一个分支
,分三种模型前序遍利
:top → Bottom,left → right中序遍利
:left → node → right后序遍利
:Bottom → top,left → right
树特点总结
-
访问
:即业务逻辑操作,如打印。递归
:直至到递归出口处前,不会对元素进行访问
操作 -
(DFS)preOrder:top→bottom left→right,
- 本质:左子树为例,对每个元素自顶向下进行
访问
操作,然后自底向上 以每个遍历过的左子树为根
,构造树;根节点右子树可假设为一棵独立树,重复前一步操作
- 本质:左子树为例,对每个元素自顶向下进行
-
(DFS)inOrder:bottom,left→node→right,以每棵子树为基本单位,自底向上
- 本质:左子树为例,
递归到底
对每个元素自底向上进行访问
操作,自底向上构造子树
。根结点右子树假设 为独立子树,重复上一步操作
- 本质:左子树为例,
-
(DFS)postOrder:bottom→top left→right,
- 本质:左子树为例,
递归到底
,从底部开始以子树为单位从左至右再对每个元素进行访问操作;根结点右子树可假设为一棵独立树,重复前一步操作
- 本质:左子树为例,
-
BFS:top→bottom left→right
- 本质:以整棵树为单位,从上至下,按层级从左至右对每个元素进行
访问操作
- 例子:BST的层序遍历结果所有元素为升序排列
- 本质:以整棵树为单位,从上至下,按层级从左至右对每个元素进行