树的遍利策略

遍利树策略

数据模型

  1. ArrayDeque(数组结构,不能存null,可作栈或双端队列)
  2. 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的层序遍历结果所有元素为升序排列
原文地址:https://www.cnblogs.com/luckyCoder/p/12732983.html