(資料結構)二叉查詢樹
樹,是一種資料結構。它是由n個有限節點組成一個具有層次關係的集合。
特點:
- 每個節點有0個或多個子節點。
- 沒有父節點的節點稱為根節點。
- 每一個非根節點有且只有一個父節點。
- 除了根節點外,每一個子節點可以分為多個不相交的子樹。
樹的基本術語:
- 節點的度:節點擁有的子樹的數目。
- 葉子:度為零的節點。
- 分支節點:度不為零的節點。
- 樹的度:樹中節點的最大的度。
- 層次:根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。
- 樹的高度:樹中節點的最大層次。
- 無序樹:如果樹中節點的各子樹之間的次序是不重要的,可以交換位置。
- 有序樹:如果樹中節點的各子樹之間的次序是重要的,不可以交換位置。
- 森林:0個或多個不相交的樹組成。對森林加上一個根,森林就成了樹。刪去根,樹就成了森林。
二叉樹,二叉樹是每個節點最多有兩個子樹的樹結構。所以二叉樹可以有五種基本形態:如圖
二叉樹的性質:
- 二叉樹第i層上的節點數目最多為2^(i-1)。 {i>=1}
證明:當i=1時,第一層! 2^0=1,第一層只有一個根節點,所以成立。
當i>1時,節點數目最多2^(i-1)。
- 深度為k的二叉樹節點數目至多有2^k-1。 {k>=1}
- 包含n個節點的二叉樹的高度至少為log2(n+1)。
- 在任意一個二叉樹中,若終端節點的個數為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]。
特點:若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值。
若任意節點的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值。
任意節點的左、右子樹,也分別是二叉查詢樹。
沒有鍵值相等的節點。
遍歷:
前序遍歷
- 訪問根節點
- 先序遍歷左子樹
- 先序遍歷右子樹
中序遍歷
- 中序遍歷左子樹
- 訪問根節點
- 中序遍歷右子樹
後序遍歷
- 後序遍歷左子樹
- 後序遍歷右子樹
- 訪問根節點
前序遍歷結果:3 1 2 5 4 6
中序遍歷結果:1 2 3 4 5 6
後序遍歷結果:1 2 4 6 5 3
前驅和後繼:
節點的前驅 是該節點的左子樹中最大的節點
節點的後繼 是該節點的右子樹中最小的節點