數據結構與算法分析筆記(8)——二叉樹和樹

樹是數據元素(結點)之間具有層次關係的非線性結構。在樹結構中,除根以外的結點只有一個前驅結點,可以有零至多個後繼結點。根結點沒有前驅結點。

樹定義

(tree)是由n(n>=0)個結點組成的有限集合(樹中元素通常稱爲結點)。n=0的樹稱爲空樹;n>0的樹T 由以下兩個條件約定構成:

1.有一個特殊的結點稱爲(root)的結點,它只有後續結點,它只有後續結點,沒有前驅結點。

2.除根結點之外的其他結點分爲m(m>=0)個互不相交的集合T0,T1,T2……Tm-1,其中每個集合Ti(0<=i<=m)本身又是一棵樹,稱爲根的子樹(subtree)。

樹的術語

1.父母、孩子與兄弟結點

結點的前驅結點稱爲其父母(parent)結點,結點的後繼結點稱爲其孩子(child)結點。一棵樹中,只有根結點沒有父母結點,其他結點有且只有一個父母結點。

擁有同一個父母結點的多個結點之間稱爲兄弟(sibling)結點。

結點的祖先(ancestor)是指其父母結點,以及父母的父母結點等,直至根結點。結點的後代(descendant,也稱子孫)是指其所有孩子結點,以及孩子的孩子結點。

2.度

結點的度(degree)是結點所擁有子樹的棵樹。

度爲0的結點稱爲葉子(leaf)結點,又稱爲終端結點;樹中除葉子結點之外的其他結點稱爲分支結點,又稱爲非葉結點或非終端結點。

3.結點的層次、樹的高度

結點的層次(level)屬性反映結點處於樹中的層次位置。約定根結點的層次爲1,其他結點的層次是其父母結點的層次加1。

二叉樹

二叉樹:二叉樹是n(n≥0)個結點的有限集,它或爲空樹(n=0),或由一個根結點和兩棵分別稱爲根的左子樹和右子樹的、互不相交的二叉樹組成。
二叉樹的結點最多有兩棵子樹,且子樹有左右之分,不可顛倒。這是二叉樹和有序樹的不同之處。

嚴格二叉樹:所有結點的度都不爲 1的非空二叉樹。即結點或者是葉結點,或者度爲2。英文翻譯爲 strictly binary tree or full binary tree or two-tree
滿二叉樹:所有葉子結點在同一層上,除葉子結點外的所有結點均有兩個子結點。節點數達到最大值。英文翻譯爲perfect binary tree


滿二叉樹

一棵滿二叉樹t,高度爲h,從第0層到第h層。第k層的結點數目爲,總結點數目爲

完全二叉樹:除了最低層外,每一層都是滿的,最低層上的葉結點儘可能地靠近左邊。英文翻譯爲complete binary tree


完全二叉樹共n個結點,每一個結點都和同樣深度的滿二叉樹的前n個編號的結點一一對應。若位置i處的結點有子結點,則其左子結點位置爲2i+1,右子結點位置爲2i+2。一棵完全二叉樹的所有元素可以存儲在一個數組裏,位置i處的元素可以放在數組索引i處

二叉樹的性質

性質1  在二叉樹的第i層上至多有2i-1個結點(i>=1)

    證明 採用歸納法證明此性質。

    當i=1時,只有一個根結點,2i-1=20 =1,命題成立。

    現在假定對所有的j,1<=j<i,命題成立,即第j層上至多有2j-2個結點,

    那麼可以證明j=i時命題也成立。由歸納假設可知,第i-1層上至多有2i-2個結點。

    由於二叉樹每個結點的度最大爲2,故在第i層上最大結點數爲第i-1

    層上最大結點數的二倍, 即2×(2i-2)=2i-1

性質2  深度爲k的二叉樹至多有2k-1個結點(k>=1)。

    證明  第i層的結點數爲xi(1≤i≤k),深度爲k的二叉樹的結點數爲M,xi最多爲2i-1,則有:

性質3  對於一棵非空的二叉樹,如果葉子結點數爲n0,度數爲2的結點數爲n2,則有n0=n2+1

    證明   設二叉樹中度爲1的結點數爲n1,二叉樹中總結點數爲N,因爲二叉樹中所有結點均小於或等於2,所以有:

N=n0+n1+n2             (5-1)

    再看二叉樹中的分支數,除根結點外,其餘結點都有一個進入分支,設B爲二叉樹中的分支總數,則有:

N=B+1。

    由於這些分支都是由度爲1和2的結點發出的,所以有:

      B=n1+2*n2          

      N=B+1=n1+2×n2+1      (5-2)

    由式(5-1)和(5-2)得到:

      n0+n1+n2 = n1+2×n2+1

      n0=n2+1

性質4  具有n個結點的完全二叉樹的深度k爲 。

   證明  設所求完全二叉樹的深度爲k,根據完全二叉樹的定義和性質2可知,k-1層滿二叉樹的結點個數爲n時,有

                     2k-1-1<n≤2k-1

即                       2k-1≤n<2k

對不等式取對數,有

                     k-1≤log2n<k

由於k是整數,所以有k-1=,k=,結論成立。

    性質5  如果對一棵有n個結點的完全二叉樹的結點按層序編號(從第1層到第 +1層,每層從左到右),則對任一結點i(1<=i<=n),有:

    (1)如果i=1,則結點i無雙親,是二叉樹的根;如果i>1,則其雙親是結點。

    (2)如果2i>n,則結點i爲葉子結點,無左孩子;否則,其左孩子是結點2i。

    (3)如果2i+1>n,則結點i無右孩子;否則,其右孩子是結點2i+1。

    此外,若對二叉樹的根結點從0開始編號,則相應的i號結點的雙親結點的編號爲(i-1)/2,左孩子的編號爲2i+1,右孩子的編號爲2i+2。

    此性質可採用數學歸納法證明。證明略。

這個性質是一般二叉樹順序存儲的重要基礎。

二叉樹的遍歷
先根次序:訪問根結點,遍歷左子樹,遍歷右子樹。
中根次序:遍歷左子樹,訪問根結點,遍歷右子樹。
後根次序:遍歷左子樹,遍歷右子樹,訪問根結點。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章