<!--{%hackmd theme-dark %}--> # Binary search tree --- ## 名詞介紹 ---- * 樹(tree) * 節點(node) * 根節點(root) * 父節點(parent) * 子節點(child) * 葉節點(leaf) * 子樹(subtree) ---- <!-- .slide: data-background="#EEEEEE" --> ![](https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg =600x) --- ## 二元搜尋樹 Binary Search Tree ---- 根據維基百科上的定義,我們可以知道; * 若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 * 若任意節點的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 * 任意節點的左、右子樹也分別為二元搜尋樹 * 沒有鍵值相等的節點 ---- 8 -> 3 -> 10 -> 6 -> 7 -> 14 -> 13 -> 1 -> 4 <!-- .slide: data-background="#EEEEEE" --> ![](https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg =600x) --- ## 遍歷 Traversal --- ## 深度優先遍歷 ### Depth-First Traversal(DFS) ---- ---- ### 前序 Pre-order * 存取根 * 存取左子樹 * 存取右子樹 ---- <!-- .slide: data-background="#EEEEEE" --> ![](https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg =600x) 8 -> 3 -> 1 -> 6 -> 4 -> 7 -> 10 -> 14 -> 13 ---- ### 後序 Post-order * 存取左子樹 * 存取右子樹 * 存取根 ---- <!-- .slide: data-background="#EEEEEE" --> ![](https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg =600x) 1 -> 4 -> 7 -> 6 -> 3 -> 13 -> 14 -> 10 -> 8 --- ## 廣度優先遍歷 ### Breadth-First Traversal(BFS) ---- * 分層遍歷 ---- <!-- .slide: data-background="#EEEEEE" --> ![](https://upload.wikimedia.org/wikipedia/commons/d/da/Binary_search_tree.svg =600x) 8 -> 3 -> 10 -> 1 -> 6 -> 14 -> 4 -> 7 -> 13 --- ## 代碼實現 ---- live coding
{"metaMigratedAt":"2023-06-14T23:48:14.285Z","metaMigratedFrom":"YAML","title":"Binary search tree","breaks":true,"slideOptions":"{\"spotlight\":{\"enabled\":false}}","contributors":"[{\"id\":\"e8edfe24-eef8-448f-beff-2798a40d21cd\",\"add\":3262,\"del\":1739}]"}
    547 views