數據結構之二叉樹總結

數據結構之二叉樹

  • 一種非線性數據結構
  1. 樹(森林)
    1. 四種表示方法
      1. 樹形表示法
      2. 嵌套集合表示法
      3. 凹入表表示法
      4. 廣義表表示法
  2. 二叉樹
    1. 五種基本形態
      1. 空二叉樹
      2. 單結點的二叉樹
      3. 右子樹爲空的二叉樹
      4. 左子樹爲空的二叉樹
      5. 左右子樹均非空的二叉樹
    2. 兩種特殊的二叉樹
      1. 滿二叉樹:一顆二叉樹的深度爲k,則其有2^k-1個節點。
      2. 完全二叉樹:先把前面的節點填滿才能填後面的。滿二叉樹是完全二叉樹的特例。
    3. 遍歷二叉樹
  3. 樹形結構的存儲方式:鏈式存儲和順序存儲
  4. 線索二叉樹
    1. 堆的構造
    2. 堆的插入與刪除
  5. 哈夫曼樹:一類帶權路徑長度最短的樹。

幾種樹的名稱:多叉樹、二叉樹、二叉排序樹、完全二叉樹、完全二叉排序樹、平衡二叉樹、平衡二叉排序樹(AVL樹)

滿二叉樹是完全二叉樹中的一種特殊情況;堆是完全二叉樹中的一種特殊情況。完全二叉樹是平衡二叉樹中的一種。

二叉樹的性質:

  1. 在二叉樹第i層上至多有2^(i-1)個節點(i>=1)
  2. 深度爲k的二叉樹至多有2^k-1個節點
  3. 對任何一棵二叉樹T,設n_0、n_2分別是葉節點的個數和度爲2的節點的個數,則有n_0=n_2+1。
  4. 具有n個節點的完全二叉樹的深度爲「log2(n)」+1。(向下取整)
  5. 對於一棵有n個節點的完全二叉樹,其任何一個編號爲i的節點(1<=i<=n),都有以下結果:
    1. 關於父節點:
      1. 若i=1,則節點i是根節點,無父節點;
      2. 若i>i,則節點i的父節點是節點「i/2」。
    2. 對於左子節點:
      1. 若2i<n,則節點 i 的左子節點是2i;
      2. 若2i>n,則節點 i 無左子節點。
    3. 對於右子節點:
      1. 若2i+1<n,則節點 i 的右子節點是2i+1;
      2. 若2i+1>n,則節點 i 無右子節點。

二叉樹的存儲方式:

  • 順序存儲結構:適合完全二叉樹;完全二叉樹可用一維數組依次存儲它的各節點。
  • 鏈式存儲結構:對於一般二叉樹(非完全二叉樹),比較適合使用一種二叉鏈表結構(非線性鏈表)來存儲;在這種鏈表中,每個節點至少包含3個域:數據域和左、右指針域。

二叉樹的遍歷

  1. 前序:即先根遍歷(整棵樹的根節點在最前面),遍歷順序爲:根—左子樹—右子樹;按照這種順序遍歷,直至沒有子節點爲止。
  2. 中序:即中根遍歷,遍歷順序爲:左子樹—根—右子樹;
  3. 後序:即後根遍歷(整棵樹的根節點在最後面),遍歷順序爲:左子樹—右子樹—根

在編程實現時,前三種遍歷需要藉助遞歸實現。

  1. 按層遍歷:從根節點開始逐層向下遍歷,直至最後一層。對於同一層的節點,由左向右遍歷。

樹的存儲結構:

  1. 父節點表示法:除根節點外每個節點都有一個指向其父節點的指針,而不要求每個節點具有指向子節點的指針。這種表示法只需要用一維數組來存儲樹的有關信息。
  2. 子節點表示法
  3. 樹的子節點-父節點表示法
  4. 子節點-兄弟表示法:又稱爲二叉鏈表表示法,以二叉鏈表的形式作爲樹的存儲結構。

二叉排序樹:見百度百科

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹

  1. 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
  2. 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
  3. 左、右子樹也分別爲二叉排序樹;
  4. 沒有鍵值相等的節點。

幾種特殊的二叉樹:

  • AVL樹,即(嚴格)平衡二叉排序樹,滿足以下性質:
  1. 它的左子樹和右子樹的深度之差的絕對值不超過1
  2. 它的左、右子樹都是平衡二叉排序樹。
  1. 堆中某個節點的值總是不大於或不小於其父節點的值;

  2. 堆總是一棵完全二叉樹。

根節點(堆頂元素)最大的堆叫做最大(值)堆或最大根堆,根節點最小的堆叫做最小(值)堆或最小根堆。

B-樹:多叉平衡查找樹,適合在外存(如磁盤文件)進行數據存儲和查找。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章