zoukankan      html  css  js  c++  java
  • 树的遍利策略

    遍利树策略

    数据模型

    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的层序遍历结果所有元素为升序排列
  • 相关阅读:
    【ElasticSearch】异常错误
    【CentOS7】系统设置
    【Ubuntu 18.04.03_64】系统配置
    【MySql】语法学习
    【ElasticSearch】聚合使用学习
    【Spring Boot】Spring Security登陆异常出路
    【ElasticSearch】查询使用学习
    Spring boot X-Frame-Options 异常 a frame because it set 'X-Frame-Options' to 'deny'
    【Thymeleaf】使用学习
    【MySql】日期时间
  • 原文地址:https://www.cnblogs.com/luckyCoder/p/12732983.html
Copyright © 2011-2022 走看看