【Day14】[资料结构]-二元树走访Binary Tree Traversal

二元树走访或称二元树遍历,简单来说就是走访树中各节点,转化为线性关系


主要分成两种策略方式

  • 深度优先搜寻(Depth-first Search,DFS)
    从根节点出发,选择某一子树并以垂直方向由上到下处理,将其子节点访问完後,再选择另一子树走访。
  • 广度优先搜寻(Breath-first Search,BFS)
    从根节点出发,以水平方向由左到右走访,将同阶层的兄弟节点访问完之後,再走访下一阶层的节点。

深度优先搜寻 DFS

https://ithelp.ithome.com.tw/upload/images/20210925/20121027KNAP2Q2EsN.jpg
假设根结点为N、左子树为L、右子树为R

  • 前序走访(Pre-order Traversal): NLR, 根节点 → 左子树 → 右子树
  • 中序走访(In-order Traversal): LNR, 左子树 → 根节点 → 右子树
  • 後序走访(Post-order Traversal): LRN, 左子树 → 右子树 → 根节点

广度优先搜寻 BFS

https://ithelp.ithome.com.tw/upload/images/20210925/20121027ttoGqdrCdi.jpg

  • 层序走访(Level-order Traversal): 1234567

以下图为例

https://ithelp.ithome.com.tw/upload/images/20210925/20121027j1S82bAe4Z.jpg

  1. 前序走访: 顺序是根节点、左子节点、右子节点。
    [1, 2, 4, 8, 9, 5, 3, 6, 10, 11, 7]
  2. 中序走访: 顺序是左子节点、根节点、右子节点。
    [8, 4, 9, 2, 5, 1, 10, 6, 11, 3, 7]
  3. 後序走访历: 顺序是左子节点、右子节点、根节点。
    [8, 9, 4, 5, 2, 10, 11, 6, 7, 3, 1]
  4. 层序走访: 顺序是由根节点一层一层往下,由左往右。
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

<<:  Day10 - 使用 GitHub 修改程序码

>>:  Day17-维稳? StatefulSet介绍

【LeetCode】DFS

今天出去玩,买了好多东西,只想赶快把这篇赶出来。 DFS:碰到一个新节点时,先从这个新节点开始往下做...

【Day26】快速乘法器的实作(Booth演算法)

为什麽要自己写乘法器? 这篇会来教大家写一个乘法器,那麽你可能会想:为什麽会需要乘法器呢?像我在 q...

Day21 - 用 Ruby on Rails 抓台湾证券交易所资料-除权除息计算结果表

前言 这篇主要以抓「台湾证券交易所」的「除权除息计算结果表」为主 取得「除权除息计算结果表」CSV ...

[神经机器翻译理论与实作] 从头建立英中文翻译器 (IV)

前言 今天会将昨天训练好的翻译模型在测试资料集进行预测,若进度符合期待,将会使用 BLEU 分数来评...

第30天-结尾

终於来到最後一天了!!!!!! 对於从0开始的我到了後面真的是满吃力的 平常上班忙碌 只能趁着下班时...