第四章:樹與二叉樹(二叉樹的邏輯結構)
1.二叉樹
二叉樹是樹結構的一種,故二叉樹也是邏輯結構。
二叉樹:二叉樹是n(n≥0)個結點的有限集合。
- 1)n=0時,二叉樹爲空;
- 2)n>0時,由根結點和兩個互不相交的被稱爲根的左子樹和右子樹組成。左子樹和右子樹也分別是一棵二叉樹。
五種基本形態
三個結點的二叉樹有多少種??
2.二叉樹VS度爲2的有序樹
- 1)二叉樹可以爲空,而度爲2的有序樹至少有三個結點
度爲2的有序樹,則說明必須有一個結點的子節點爲兩個
- 2)二叉樹的孩子結點始終有左右之分,而度爲2有序樹的孩子結點次序是相對的
在度爲2的有序樹中,如果有一個結點只有一個孩子結點,則是不分左右的。
3.特殊二叉樹
3.1滿二叉樹
滿二叉樹:一棵高度爲h,且含有2^h-1個結點的二叉樹爲滿二叉樹。
上篇文章中講樹的時候我們知道:高度爲h的m叉樹至多有(m^h-1)/(m-1) 個結點。這裏我們把m換成2,即可。
編號規則:從上到下、從左到右;
觀察上述編號可以發現下面結論:
對於編號爲 i
的結點,若存在,其雙親的編號爲(i/2
取整),左孩子爲2i,
右孩子爲2i+1
3.2完全二叉樹
完全二叉樹:設一個高度爲h、有n個結點的二叉樹,當且僅當其每個結點都與高度爲h的滿二叉樹中編號1~n的結點一 一
對應時,稱爲完全二叉樹。
我們可以發現,如果一個二叉樹是完全二叉樹,則此二叉樹除了最後一層結點數不滿外,其餘層結點數都是滿的。
完全二叉樹的性質:
- 若 i <= n/2 取整數,則結點 i 爲分支結點,否則爲葉子結點。
i
是結點編號,n
是結點的總數。
- 葉子結點只可能在層次最大的兩層上出現。對於最大層次的葉子結點,都依次排在最左邊的位置上。
- 度爲1的結點若存在,則可能只有一個,且是編號最大的分支結點,並且孩子結點一定是左結點。
因爲完全二叉樹的編號是按照從上到下,從左到右編號的,而且除了最後一層結點數不滿外,其餘層結點數都是滿的,所以度爲1的結點可能存在也可能不存在,如果存在只可能在最後一個結點的雙親結點才能出現度爲1的結點。
所有的性質都緊緊依賴完全二叉樹的編號是從上到下,從左到右的。
3.3二叉排序樹
二叉排序樹:一棵二叉樹,若樹非空則具有如下性質:
- 對任意結點若存在左子樹或右子樹,則其左子樹上所有結點的關鍵字均小於該結點。
- 右子樹上所有結點的關鍵字均大於該結點。
可以發現二叉排序樹的左子樹和右子樹都是一棵二叉排序樹。
3.4平衡二叉樹
平衡二叉樹:樹上任意結點
的左子樹
和右子樹
的深度差不超過1
f複習:高度和深度的定義,某節點的
深度
是指從根節點到該節點的最長簡單路徑邊的條數,而高度是指從該節點到葉子節點的最長簡單路徑邊的條數。記住:深度是從根結點到該結點的邊數的,而高度是從葉子節點往上數到該結點的邊數。
注意:這裏邊的條數是規定根節點的深度和葉子節點的高度是0;
所以樹的深度和高度是相等的,而對其他節點來說深度和高度不一定相等。
上圖就不是一個平衡二叉樹:
上圖根結點的左子樹深度爲3,右子樹深度爲2,3-2=1,沒問題,但是A結點的左子樹深度爲2,而A結點的右子樹深度爲0,2-0=2>1,不對。
4.二叉樹的性質
4.1n0=n2+1
- 非空二叉樹上的葉子結點數等於度爲2的結點數加1,即
n0=n2+1
.
如圖上述二叉樹:
- 首先我們知道二叉樹的結點數等於各種度數二叉樹結點的和,即
n=n0+n1+n2
。 - 另外
n=0*n0+1*n1+2*n2+1
,這個計算方法是按照子節點個數計算的,0*n0
代表葉子節點的子節點數(葉子結點子節點數爲0,故乘以0),1*n1
代表子節點數爲1的結點的個數,2*n2
代表子節點數爲2的結點的個數,最後加上1,代表根結點。
將上面的兩個關於n的式子相減即可得到:n0=n2+1
4.2性質2
非空二叉樹上第 k 層上至多有 2^(k-1)個結點(k≥1)
4.3性質3
高度爲h的二叉樹至多有2^h -1個結點(h>=1) [滿二叉樹結點的總數]
4.4性質4
4)對完全二叉樹按從上到下、從左到右的順序依次編號1,2,…n,則有以下關係:
- 當 i>1 時,結點的雙親結點標號爲 i/2 取整數, 即當 i 爲偶數時,其雙親結點的編號爲 i/2 ,他是雙親結點的左孩子;當爲奇數時,其雙親結點的編號爲(i-1)/2, 他是雙親結點的右孩子。
- 當 2i <= n 時,結點 i 的左孩子編號爲 2i ,否則無左孩子
- 當 2i+1<=n 時,結點 i 的右孩子編號爲 2i+1,否則無右孩子
4.5性質5
則第h層,2^(h-1) =< i < 2^h
,對該式子兩端取對數,則h-1 =< log2i< h
,我們對log2i取下界,則得到h-1,再加1則得到系欸但所在的層次:[log2i] +1
4.6性質6
由性質3:高度爲h的二叉樹至多有2^h -1
個結點(h>=1)。令2^h -1=n
,則可以推出 h = log2(n+1),至於這裏爲啥要取上界,是因爲這個性質3,是按照滿二叉樹情況,但是完全二叉樹的最後一層結點數不一定能達到最多,但也要算一層。
關於數據結構的知識,持續更新中,歡迎關注公衆號理木客