- 使用樹形結構可以大大提高效率
組織架構圖, 文件目錄結構
基本概念
- 節點, 根節點, 父節點, 子節點, 兄弟節點
- 空樹, 子樹, 左子樹, 右子樹
- 節點的度(degree): 子樹的個數
- 樹的度: 所有節點度中的最大值
- 葉子節點(leaf): 度為0的節點
- 非葉子節點: 度不為0的節點
- 層數(level): 根節點一般為第 0 / 1 層
- 節點的深度 (depth): 從根節點到當前節點的路徑上的節點總數
- 節點的高度(Height): 從當前節點到最遠葉子節點的路徑上的節點總數
- 樹的深度: 所有節點深度中的最大值
- 樹的高度: 所有節點高度中的最大值
- 有序樹
樹中任意節點的子節點之間有順序關系 - 無序樹 - 自由樹
- 森林: 有若干個有序樹和自由樹構成
二叉樹 Binary Tree
特點
- 每個節點的度最大為2(最多有2個子樹)
- 左子樹和右子樹是有順序的
- 即使某個節點之后一棵子樹, 也要區分左子樹右子樹
性質
- 非空二叉樹的第i層, 最多有2^(n-1)個節點(n>=1)
- 在高度為h的二叉樹上最多有2^h - 1 個節點(n>=1)
- 對于任何一棵非空二叉樹, 如果葉子節點個數為n0, 度為2的節點個數為n2, 則有: n0 = n2 + 1
真二叉樹
- 所有節點的度要么為0, 要么為2
滿二叉樹
- 所有節點的度要么為0, 要么為2, 所有的葉子節點都在最后一層
- 同樣高度的二叉樹中, 滿二叉樹的葉子節點數量最多, 節點數量最多
假設滿二叉樹的高度為h - 第i層節點數量 2^i - 1
- 葉子節點數量 2^(h - 1)
- 總節點數量 2^h - 1
- 高度 h = log2 (n+1)
完全二叉樹 (complete binary tree)
- 葉子節點只會出現最后2層, 且最后一層的葉子節點都靠左對齊
- 完全二叉樹從根節點到倒數第二層, 是滿二叉樹
- 滿二叉樹是完全二叉樹
性質
- 度為1的節點只有左子樹
- 度為1的節點要么是1個, 要么是0個
- 同樣節點數量的二叉樹, 完全二叉樹的高度最小
- 假設完全二叉樹的高度為h, 那么
- 至少有2^(h-1)個節點
- 至多有2^h - 1 個節點
- 總節點數量
2^(h-1) <= n < 2^h - 1
h - 1 <= log2n < h
h = floor(log2n) + 1