1. 程式人生 > >資料結構複習(十二)之平衡二叉樹及哈夫曼樹

資料結構複習(十二)之平衡二叉樹及哈夫曼樹

平衡二叉樹需要保證在插入和刪除二叉樹結點時,任意結點的左、右子樹的高度差絕對值不超過1,所以平衡二叉樹或者為一棵空樹,或者為具有左子樹和右子樹都為平衡二叉樹的性質。插入和刪除時出現不滿足條件時可進行一定的調整,分為LL平衡旋轉、RR平衡旋轉、LR平衡旋轉、RL平衡杆旋轉。

哈夫曼樹又稱為最優二叉樹,使得帶權路徑長度WPL最小,哈夫曼樹的構造可以按照哈夫曼演算法:

  1)將這N個結點分別作為N棵僅含一個結點的二叉樹,構成森林F。
  2)構造一個新結點,並從F中選取兩棵根結點權值最小的樹作為新結點的左、右子樹,並且將新結點的權值置為左、右子樹上根結點的權值之和。
  3)從F中刪除剛才選出的兩棵樹,同時將新得到的樹加入F中。

  4)重複步驟2)和3),直至F中只剩下一棵樹為止。

從上述構造過程中可以看出哈夫曼樹具有如下特點:
  1)每個初始結點最終都成為葉結點,並且權值越小的結點到根結點的路徑長度越大。

  2)構造過程中共新建了N-1個結點(雙分支結點),因此哈夫曼樹中結點總數為2N-1。

  3)每次構造都選擇2棵樹作為新結點的孩子,因此哈夫曼樹中不存在度為1的結點。