1. 程式人生 > >資料結構——樹和二叉樹的基本概念

資料結構——樹和二叉樹的基本概念

樹是一種非線性結構,是遞迴結構。

樹的基本術語:

  1. 樹結點:包含一個數據元素及若干指向子樹的分支;
  2. 孩子結點:結點的子樹的根稱為該結點的孩子;
  3. 雙親結點:B結點是A結點的孩子,則A結點是B結點的雙親;
  4. 兄弟結點:同一雙親的孩子結點;
  5. 堂兄結點:同一層上結點;
  6. 結點層次:根結點的層定義為1;根的孩子為第二層結點,依此類推;
  7. 樹的高(深)度:樹中最大的結點層
  8. 結點的度:結點子樹的個數
  9. 樹的度: 樹中最大的結點度。
  10. 葉子結點:也叫終端結點,是度為0的結點;
  11. 分枝結點:度不為0的結點(非終端結點);
  12. 森林:互不相交的樹集合;
  13. 有序樹:子樹有序的樹,如:家族樹;
  14. 無序樹:不考慮子樹的順序;

二叉樹

    二叉樹可以為空。二叉樹結點的子樹要區分左子樹和右子樹,即使只有一棵子樹也要進行區分,說明它是左子樹,還是右子樹。這是二叉樹與樹的最主要的差別。注意區分:二叉樹、二叉查詢樹/二叉排序樹/二叉搜尋樹、二叉平衡(查詢)樹

    二叉平衡樹肯定是一顆二叉排序樹。堆不是一顆二叉平衡樹。

    二叉樹與樹是不同的,二叉樹不等價於分支樹最多為二的有序樹。當一個結點只包含一個子節點時,對於有序樹並無左右孩子之分,而對於二叉樹來說依然有左右孩子之分,所以二叉樹與樹是兩種不同的結構。

二叉樹的性質

  1. 在二叉樹的第 i 層上至多有2i-1個結點。
  2. 深度為 k 的二叉樹上至多含 2k-1 個結點(k≥1)
  3. 對任何一棵二叉樹,若它含有n0個葉子結點、n2個度為 2 的結點,則必存在關係式:n0= n2+1。
  4. 具有 n 個結點的完全二叉樹的深度為⎣log2 n⎦+1 。
  5. n個結點的二叉樹中,完全二叉樹具有最小的路徑長度。
  6. 如果對一棵有n個結點的完全二叉樹的結點按層序編號,則對任一結點i(1<=i<=n),有: 
    1. 如果i=1,則結點i無雙親,是二叉樹的根;如果i>1,則其雙親的編號是 i/2(整除)。
    2. 如果2i>n,無左孩子;否則,其左孩子是結點2i。
    3. 如果2i+1>n,則結點i無右孩子;否則,其右孩子是結點2i+1。

二叉樹的儲存結構

  1. 順序儲存結構:僅僅適用於滿或完全二叉樹,結點之間的層次關係由性質5確定。
  2. 二叉連結串列法:每個節點儲存左子樹和右子樹。三叉連結串列:左子樹、右子樹、父節點,總的指標是n+2
  3. 在有n個結點的二叉連結串列中,值為非空的鏈域的個數為n-1。在有N個結點的二叉連結串列中必定有2N個鏈域。除根結點外,其餘N-1個結點都有一個父結點。所以,一共有N-1個非空鏈域,其餘2N-(N-1)=N+1個為空鏈域。
  4. 二叉鏈儲存法也叫孩子兄弟法,左指標指向左孩子,右指標指向右兄弟。而中序遍歷的順序是左孩子,根,右孩子。這種遍歷順序與儲存結構不同,因此需要堆疊儲存中間結果。而中序遍歷檢索二叉樹時,由於其儲存結構跟遍歷順序相符,因此不需要用堆疊。