樹,是一種資料結構。它是由n個有限節點組成乙個具有層次關係的集合。
特點:
樹的基本術語:
節點的度:節點擁有的子樹的數目。
葉子:度為零的節點。
分支節點:度不為零的節點。
樹的度:樹中節點的最大的度。
層次:根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。
樹的高度:樹中節點的最大層次。
無序樹:如果樹中節點的各子樹之間的次序是不重要的,可以交換位置。
有序樹:如果樹中節點的各子樹之間的次序是重要的,不可以交換位置。
二叉樹,二叉樹是每個節點最多有兩個子樹的樹結構。所以二叉樹可以有五種基本形態:如圖
二叉樹的性質:
二叉樹第i層上的節點數目最多為2^(i-1)。 證明:當i=1時,第一層! 2^0=1,第一層只有乙個根節點,所以成立。
當i>1時,節點數目最多2^(i-1)。
深度為k的二叉樹節點數目至多有2^k-1。
包含n個節點的二叉樹的高度至少為log2(n+1)。
在任意乙個二叉樹中,若終端節點的個數為n0,度為2的節點數為n2,則n0=n2+1.
滿二叉樹,完全二叉樹和二叉查詢樹。
1.滿二叉樹
定義:高度為h,並且有2^h-1個節點的二叉樹,叫做滿二叉樹。
2.完全二叉樹
特點:葉子只能出現在最下層和次下層,且最下層的葉子節點集中在樹的左部。
顯然一棵滿二叉樹一定是完全二叉樹,但是乙個完全二叉樹不一定是滿二叉樹。
3.二叉查詢樹
定義:二叉查詢樹又稱為二叉搜尋樹。設x為二叉查詢樹的乙個節點,x節點包含關鍵字key,節點x的key值叫做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
前驅和後繼:
節點的前驅是該節點的左子樹中最大的節點
節點的後繼是該節點的右子樹中最小的節點
資料結構 二叉查詢樹
使二叉樹成為二叉查詢樹的性質是,對於樹中的每個節點x,它的左子樹中所有關鍵字值小於x的關鍵字值,而它的右子樹中所有關鍵字值大於x的關鍵字值。這意味著,該樹所有的元素以某種統一的方式排序。二叉查詢樹是一棵特殊的二叉樹,二叉查詢樹中節點的結構與二叉樹種節點的結構相同,關鍵在於可以在二叉查詢樹上可以執行的...
資料結構 樹 二叉查詢樹
wiki 首先是名稱 二叉查詢樹英文叫binary search tree,這個在很多演算法題目中很常見所以要記住,特別是英文題目中。也叫做二叉排序樹,二叉搜尋樹等等。具體的定義比較官方,用自己的話說,首先它肯定是二叉樹,其次,當前節點的左子葉元素值比當前節點小,右子葉元素值比當前節點大,所以節點均...
資料結構之二叉查詢樹
針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...