1. 程式人生 > 其它 >資料結構--二叉樹

資料結構--二叉樹

術語

  1. 節點的深度: 對於任意節點 n, n 的深度為從根到 n 的唯一路徑長, 根的深度為 0;
  2. 節點的高度: 對於任意節點 n, n 的高度為從 n 到一片樹葉的最長路徑長, 所有樹葉的高度為 0;
  3. 樹的深度: 樹中所有節點的最大深度, 稱作樹的深度;
  4. 樹的高度: 樹的高度等於它的根節點的高度;
  5. 結點的度(Degree): 結點擁有的子樹數目稱為結點的度;

樹的種類

有序樹: 樹中任意節點的子節點之間有順序關係, 這種樹稱為有序樹;

  1. 二叉樹: 每個節點最多含有兩個子樹的樹稱為二叉樹;
    • 完全二叉樹: 對於一棵二叉樹, 假設其深度為d(d>1). 除了第d層外, 其它各層的節點數目均已達最大值, 且第d層所有節點從左向右連續地緊密排列, 這樣的二叉樹被稱為完全二叉樹;
    • 滿二叉樹: 所有葉節點都在最底層的完全二叉樹;
    • 平衡二叉樹(AVL樹): 當且僅當任何節點的兩棵子樹的高度差不大於1的二叉樹;
  2. B樹: 一種對讀寫操作進行優化的自平衡的二叉查詢樹, 能夠保持資料有序, 擁有多於兩個子樹.

平衡二叉樹

假設一顆 AVL 樹的某個節點為 A, 有四種操作會使 A 的左右子樹高度差大於 1, 從而破壞了原有 AVL 樹的平衡性.
平衡二叉樹插入節點的情況分為以下四種:

插入方式 描述 旋轉方式
LL 在 A 的左子樹根節點的左子樹上插入節點而破壞平衡 右旋轉
RR 在 A 的右子樹根節點的右子樹上插入節點而破壞平衡 左旋轉
LR 在 A的左子樹根節點的右子樹上插入節點而破壞平衡 先左旋後右旋
RL 在 A的右子樹根節點的左子樹上插入節點而破壞平衡 先右旋後左旋

平衡二叉樹的失衡調整主要是通過旋轉最小失衡子樹來實現的.