1. 程式人生 > >(資料結構)二叉查詢樹

(資料結構)二叉查詢樹

,是一種資料結構。它是由n個有限節點組成一個具有層次關係的集合。

特點

  • 每個節點有0個或多個子節點。
  • 沒有父節點的節點稱為根節點。
  • 每一個非根節點有且只有一個父節點。
  • 除了根節點外,每一個子節點可以分為多個不相交的子樹。

樹的基本術語

  1. 節點的度:節點擁有的子樹的數目。
  2. 葉子:度為零的節點。
  3. 分支節點:度不為零的節點。
  4. 樹的度:樹中節點的最大的度。
  5. 層次:根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。
  6. 樹的高度:樹中節點的最大層次。
  7. 無序樹:如果樹中節點的各子樹之間的次序是不重要的,可以交換位置。
  8. 有序樹:如果樹中節點的各子樹之間的次序是重要的,不可以交換位置。
  9. 森林:0個或多個不相交的樹組成。對森林加上一個根,森林就成了樹。刪去根,樹就成了森林。

 

二叉樹,二叉樹是每個節點最多有兩個子樹的樹結構。所以二叉樹可以有五種基本形態:如圖

 

二叉樹的性質

  1. 二叉樹第i層上的節點數目最多為2^(i-1)。   {i>=1}

    證明:當i=1時,第一層! 2^0=1,第一層只有一個根節點,所以成立。

                當i>1時,節點數目最多2^(i-1)。

  2. 深度為k的二叉樹節點數目至多有2^k-1。    {k>=1}
  3. 包含n個節點的二叉樹的高度至少為log2(n+1)。
  4. 在任意一個二叉樹中,若終端節點的個數為n0,度為2的節點數為n2,則n0=n2+1.

 

滿二叉樹,完全二叉樹和二叉查詢樹

1.滿二叉樹

定義:高度為h,並且有2^h-1個節點的二叉樹,叫做滿二叉樹。

2.完全二叉樹

定義:二叉樹中,只有最下面兩層節點的度可以小於2,並且最下一層的葉節點集中在靠左的若干位置上,這樣的二叉樹稱之為完全二叉樹。

特點:葉子只能出現在最下層和次下層,且最下層的葉子節點集中在樹的左部。

            顯然一棵滿二叉樹一定是完全二叉樹,但是一個完全二叉樹不一定是滿二叉樹。

3.二叉查詢樹

定義:二叉查詢樹又稱為二叉搜尋樹。設x為二叉查詢樹的一個節點,x節點包含關鍵字key,節點x的key值叫做key[x]。如果y是x的左子樹中的一個節點,則key[y]<key[x]。如果y是x的右子樹中的一個節點,則key[y]>key[x]。

特點:若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值。

            若任意節點的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值。

            任意節點的左、右子樹,也分別是二叉查詢樹。

            沒有鍵值相等的節點。

 

遍歷

前序遍歷

  1. 訪問根節點
  2. 先序遍歷左子樹
  3. 先序遍歷右子樹

中序遍歷

  1. 中序遍歷左子樹
  2. 訪問根節點
  3. 中序遍歷右子樹

後序遍歷

  1. 後序遍歷左子樹
  2. 後序遍歷右子樹
  3. 訪問根節點

前序遍歷結果:3 1 2 5 4 6

中序遍歷結果:1 2 3 4 5 6

後序遍歷結果:1 2 4 6 5 3

 

前驅和後繼:

節點的前驅  是該節點的左子樹中最大的節點

節點的後繼  是該節點的右子樹中最小的節點