Tree Traversal(二叉樹的遍歷)
阿新 • • 發佈:2019-01-23
Binary Tree 二叉樹
Full Binary Tree 滿二叉樹
葉節點都在最底層,其他節點都有左、右子節點。
N = 2^L - 1
Complete Binary Tree 完全二叉樹
除了最後一排,其他排都是滿的,最後一排的子節點集中在左邊。
如果父節點是 i, 他的左子節點是 2*i , 右子節點是 2*i+1;
如果子節點是i, 父節點就是floor(i/2)
Binary Search Tree 有序二叉樹
- 左子樹上的值小於根節點;
- 右子樹上的值大於根節點;
- 沒有值相等的節點;
- 任意節點的左、右子樹也為有序二叉樹
Tree Traversals (Inorder, Preorder and PostOrder) 樹的遍歷(中序,前序,後序遍歷)
- Preorder 前序遍歷: Root - Left - Right (NLR) 父節點 - 左子節點 - 右子節點
- Inorder 中序遍歷:Left - Root - Right (LNR) 左子節點 - 父節點 - 右子節點
- Postorder 後續遍歷:Left - Right - Root (LRN) 左子節點 - 右子節點 - 父節點
DFS (深度優先):
preorder(node)
if (node == null) return;
visit (node);
preorder(node.left);
preorder(node.right);
inorder(node) if (node == null) return; preorder(node.left); visit (node); preorder(node.right);
postorder(node)
if (node == null) return;
preorder(node.left);
preorder(node.right);
visit (node);
BFS (廣度優先):
levelorder(root) q ← empty queue q.enqueue(root) while (not q.isEmpty()) node ← q.dequeue() visit(node) if (node.left ≠ null) q.enqueue(node.left) if (node.right ≠ null) q.enqueue(node.right)
LeetCode Tree 問題:(緩慢更新)
https://github.com/JoyceHao/Online-Programming-Solution
Ref:
Wikipedia