註:本文的主要目的是為了記錄自己的學習過程,也方便與大家做交流。轉載請註明來自:
http://blog.csdn.net/ab198604
一、什麼是樹?
在前幾篇的博文中主要講述的是鏈式儲存這種資料結構,它們的用途非常廣泛,但是在實際的應用中,還存在著另一種非常重要的資料結構,它就是樹。樹的結構如下所示:
就是一種資料結構----樹,之所以在每個框中都留出空白,主要原因是這種結構如果根據上下文是能夠傳達一些重要的結構資訊,比如我們可以作如下思考:
1、可以表示某公司的職能組織圖;
2、可以表示某公司從上層到底層的各種職位分布圖;
3、可以表示某家族的族譜血緣關係;
4、可以表示電腦中的目錄結構;
........
後面可以發揮自己的想象,只要能符合以上結構的都可以稱之為樹型結構。通過上述思考就可以發現樹型結構的用途之廣泛,它表示的是資料之間的一種層次關係,層與層之間存在著某種關係,我認為這就是樹型結構的重要特點,這與其它結構有著很大的區別。
對樹而言,先瞭解以下基本概念:
1
/ \
2 3
/ \ /
4 5 6
1、每棵樹都有一個“根”,這是樹的“根基”,稱為root,通過root我們可以很容易的找到樹上的各個支點,中“1”為樹的root;
2、一棵樹上的每個節點,它們有可能有分支,有可能沒有分支,分支的數目稱為分支因子。如中,最大的分支結因子為2,"3"結點的分支因子為1
3、每棵樹都有一個高度,資料的層次數就是樹的高度,中樹的高度為3。
4、通用概念:
1與2,3之間的關係為:1是父,2是其左孩子,3是其右孩子。2與3相互之間稱為兄弟。 沒有孩子的結點稱為葉子結點,如4\5\6結點。
二、什麼是二叉樹
對樹而言,需要重點掌握二叉樹。二叉樹是一種特殊的順序樹,它規定有左右兩個孩子,即左右孩子順序不能替換,所以二叉樹是一種有序樹。二叉樹的結點數為大於0小於等於2。對於二叉樹,需要掌握以下性質:
性質1 在二叉樹的第i層上至多有個結點(i>=1)
由資料歸納法即可證明,
i=1,結點數為1
i=2,結點數為2
i=3,結點數為4
i=4,結點數為8
I=n, 結點數為.
性質2 深度為K的二叉樹至多有-1個結點(k >=1)
換言之,如果二叉樹的深度確定,則其最大的結點數也是確定的。
證明(可以利用性質1)
深度為K的二叉樹的結點個數=二叉樹中每一層結點個數的總和。即為:
= 1 + 2 + 4 + 8 + … + =-1(等比公式)
性質3 二叉樹中,終端結點個數與度為2的結點個數有如下關係:
= + 1
(註:度表示分支的個數,也指分支因子,終端結點也指葉子結點)
分析:二叉樹中結點的度可以為0,1,2,也就是說需要證明結點的度為0與度為2的結點之間的關係是不變的。
證明:設二叉樹中度為i的結點數為
則整棵二叉樹的結點總數為:n =++
------------(1)
除根結點外,每一個結點都是另一個結點的孩子,所以孩子數為n-1 --------(2)
度為i(I = 0,1,2)的結點,有i個孩子,
孩子數 = x 0 +x 1 +x
2 = 2 + ---------------(3)
因為:(3) = (2),所以,
n-1 = 2+ ------(4)
(4) – (1) ,得,
-1= - , 即 = +
1證畢.
性質1、2、3是二叉樹的通用特性。
在介紹其它性質之前,先瞭解另一種特殊的二叉樹,即滿二叉樹,其定義如下:
滿二叉樹是指深度為K,且有-1個結點的二叉樹。
特點:(1) 每層上結點數都達到最大
(2) 度為1的結點個數=0,即不存在分支數為1的結點
如下即為一棵滿二叉樹:(注意其順序:結點層序編號方法,從根結點起從上至下逐層從左至右對二叉樹的結點進行連續編號)
1
/ \
2 3
/ \ / \
4 5 6 7
當K = 3, 結點數-1 = 7
完全二叉樹:深度為k,結點數為n的二叉樹,若且唯若每個結點的編號都與相同深度的滿二叉樹中從1到n的結點一一對應時,稱為完全二叉樹。
根據定義可以理解:深度為k的完全二叉樹,其結點總數比深度k-1的滿二叉樹要多,但一定比深度為k的滿二叉樹要少。即有:完全二叉樹示意如下:
1
/ \
2 3
/ \
4 5 (注意編號順序,與滿二叉樹一一對應)
性質4:結點數為n的完全二叉樹,其深度為(向下取整)+ 1
由性質2及完全二叉樹的定義有:
結點數滿足:
性質5:在按層序編號的n個結點的完全二叉樹中,任意一個結點i()有:
(1) i = 1時,結點i是樹的根,否則(i> 1),結點i的雙親為i/2(向下取整),如
,取i = 2.
(2) 2i > n時,結點i無左孩子,為葉結點,否則結點i的左孩子為結點2i
(3) 2i+1 > n時,結點i無右孩子,否則結點i的右孩子為結點2i +1.
性質4與性質五是針對完全二叉樹而言的。性質6是針對二叉樹的鏈式儲存結構而言。
性質6: 含有n個結點的二叉鏈表中,有n + 1個空鏈域。