A binary tree คือโครงสร้างระดับชั้นที่แต่ละ node มีอย่างมากสองตัว children เรียกว่า left และ right มีหนึ่ง ; node ที่ไม่มีลูกคือ เป็นพื้นฐานของ BST, heap และ expression tree
A binary tree คือโครงสร้างระดับชั้นที่แต่ละ node มีอย่างมากสองตัว children เรียกว่า left และ right มีหนึ่ง ; node ที่ไม่มีลูกคือ เป็นพื้นฐานของ BST, heap และ expression tree
1 depth 0 (root)
/ \
2 3 depth 1
/ \
4 5 depth 2 (leaves: 4,5,3)
class Node:
def __init__(self, val, left=None, right=None):
self.val, self.left, self.right = val, left, right
def inorder(n): # left, node, right -> 4 2 5 1 3
if n:
inorder(n.left); print(n.val); inorder(n.right)
def preorder(n): # node, left, right -> 1 2 4 5 3
if n:
print(n.val); preorder(n.left); preorder(n.right)
def postorder(n): # left, right, node -> 4 5 2 3 1
if n:
postorder(n.left); postorder(n.right); print(n.val)
A level-order (BFS) traversal ใช้ queue และเยี่ยมชมจากระดับต่อระดับ
| Traversal | Order | Common use |
|---|---|---|
| Inorder | L, N, R | sorted output of a BST |
| Preorder | N, L, R | copy/serialize a tree |
| Postorder | L, R, N | delete a tree, evaluate expr |
| Level-order | by depth | BFS, shortest path on tree |
การเดินแต่ละครั้งเยี่ยมชม node ทุกตัวหนึ่งครั้ง → เวลา O(n) พื้นที่ stack O(h) โดย h คือความสูงของต้นไม้
ต้นไม้ไบนารีมีโมเดลข้อมูลลำดับชั้นอย่างเป็นธรรมชาติ (ระบบไฟล์, ต้นไม้วิเคราะห์, ต้นไม้ตัดสินใจ) และเป็นพื้นฐานของโครงสร้างการค้นหาและการเรียงลำดับที่มีประสิทธิภาพ
การเชี่ยวชาญการเดินสี่ประการเป็นสิ่งจำเป็น — ปัญหาต้นไม้ส่วนใหญ่ในการสัมภาษณ์เป็นรูปแบบหนึ่งของมัน