樹是數據元素(結點)之間具有層次關係的非線性結構。在樹結構中,除根以外的結點只有一個前驅結點,可以有零至多個後繼結點。根結點沒有前驅結點。
樹定義
樹(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
二叉樹的性質
性質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。
此性質可採用數學歸納法證明。證明略。
這個性質是一般二叉樹順序存儲的重要基礎。
二叉樹的遍歷