前言
紀錄 Tree 的用途還有 DFS 與 BFS 的概念
Tree 的用途
樹狀結構可以用在很多地方
Syntax Tree for sentence
I ate the cake
Expression
sin(3z - 7)
Abstract Syntax Tree
1 | while x < 0 |
Binary Search Tree (BST)
通常是左小又大,這邊放的例子是以字母(ASCII)排序
Tree 的結構
一棵樹有好幾個節點,其中的關係有
- Root (最頂端的節點)
- Ancestor (父母、祖先)
- Decendants (小孩、子孫)
- Sibling (兄弟)
- Leaf (no children)
一棵樹的高度定義為
Height: maximum depth of subtree node and farthest leaf
可以用 recursive 來計算樹的高度
1 | Height(tree) |
拜訪一棵樹有兩種做法
- Depth First
- Breadth First
Depth First
先找leaf,再找sibling
DFS 基本上就是 recursive
Inorder 中序
left → root → right
1 | InOrderTraversal(tree) |
Pre-order 前序
root → left → right
1 | PreOrderTraversal(tree) |
Post-order 後序
left → right → root
1 | PostOrderTraversal(tree) |
Breadth First
level by level
先把sibling找完了才往下找
通常實作 BFS 會用 Queue 的特性來實現
1 | LevelTraversal(tree) |
以上演算法跑例圖的過程如下