樹型結構:
1、樹的基本概念
一種表示層次關係的(一對多)資料結構。
有且僅有乙個特定的節點,該節點沒有前驅,被稱為根節點。
剩餘的n個互不相交的子集,其中每個子集也都是一棵樹,被稱為根節點的子樹。
注意:樹型結構具有遞迴性(樹中有樹)。
2、樹的表示方法:倒懸樹、巢狀法、凹凸法。
3、樹的專業術語:
節點:組成樹的基礎元素,同時它也是一棵樹。
節點的度:該節點子樹的數量。
樹的度(密度):樹中節點的數量。
葉子節點:節點的度為0的節點。
雙親和孩子:節點的子樹被稱為孩子節點,該節點就是它們的雙親。
兄弟:具有同乙個雙親節點,被稱為兄弟節點。
祖先:從根節點出發到該節點,經過的所有節點都被稱為該節點的祖先。
子孫:乙個節點的子樹中的任意乙個節點都被稱為它的子孫。
節點的層次:根節點層次為1,它的孩子層次為2,孩子的防止層次為3,依次類推。
堂兄弟:雙親在同一層互為堂兄弟。
樹的深度:樹的最大層次為樹的深度。
森林:n個不相交的樹的集合被稱為森林。
4、樹的儲存
樹可以順序儲存、鏈式儲存,也可以混合儲存,由於儲存的資訊不同,有以下表示方式:
雙親表示法:順序
位置 data 雙親
0 a -1
1 b 0
2 c 0
3 d 1
4 e 2
5 g 4
6 f 4
7 h 2
優點:方便找到雙親,缺點:查詢孩子節點不方便。
孩子表示法:
順序:浪費空間
位置 data sub_arr
0 a 1,2
1 b 3
2 c 4,7
3 d4 e 5,6
5 g6 f
7 h鏈式:節約空間
位置 data listhead
0 a1 b
2 c3 d
4 e5 g
6 f7 h
優點:方便找孩子,缺點:不方便找雙親結點。
兄弟表示法:
雙親只儲存第乙個子節點,然後鏈式指向所有兄弟節點。
優點:可以方便的查詢到兄弟節點 缺點:查詢雙親比較麻煩
資料 第乙個子節點 兄弟節點頭指標
二叉樹:
是常用的一種資料結構,處理起來比普通簡單,而且普通樹可以很方便轉換成二叉樹。
定義:二叉樹是n個有限元素的集合,由乙個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。
二叉樹的性質:
性質1:二叉樹的第i層上最多有2^(i-1)個節點。
每層的節點數都是2^(i-1),這種樹叫滿二叉樹。
對樹中的結點按從上至下、從左到右的順序進行編號,如果編號為i(1≤i≤n)的結點與滿二叉樹中編號為i的結點在二叉樹中的位置相同,則這棵二叉樹稱為完全二叉樹。
性質2:深度為h的二叉樹中至多含有2^h-1個節點。
性質3:若在任意一棵二叉樹中,有n0個葉子節點,有n2個度為2的節點,則必有n0=n2+1。
性質4:具有n個節點的完全二叉樹深為log2^n+1。
性質5:若對一棵有n個節點的完全二叉樹進行順序編號(1≤i≤n),那麼,對於編號為i(i≥1)的節點:
當i=1時,該節點為根,它無雙親節點。
當i>1時,該節點的雙親節點的編號為i/2(順序儲存)。
如果2i<=n,則編號為2i 則有編號為i的左孩子。
如果2i+1<=n,則編號為 2i+1 為編號為i的右孩子。
二叉樹的操作:
構建、銷毀、遍歷、高度、密度、插入、刪除、求左、求右、求根
destory(root)
high(treenode* root)
density(treenode* root)
insert(treenode* root,pdata,data)
return insert(root->left) || insert(root->right);
}二叉樹的儲存:
順序:必須按照完全二叉樹的格式儲存,空位置使用特殊資料代替。
資料項:
儲存節點的記憶體
容量鏈式:由乙個個節點組成,每乙個節點就是一棵樹。
節點資料項:
資料左子樹指標
右子樹指標
二叉樹的遍歷:
前序:根、左、右
中序:左、根、右
後序:左、右、根
注意:前中後由根節點決定,不存在左、左根的後序,左、右子的次序不變。
注意:根據 前序+中序 或者 中序+後序 還原一棵樹,前序+後序無法還原(無法判斷出根節點的左右子樹)。
層序:從上到下、從左到右遍歷一棵樹,必須與佇列配合。
有序二叉樹:
左子樹的資料小於根,右子樹大於等於根,這種樹叫有序二叉樹。
注意:由於這種樹的節點需要頻繁的插入刪除,因此不適合有順序儲存。
資料結構 07 排序
簡單的排序方法 氣泡排序 選擇排序 插入排序 希爾排序。先進的排序方法 歸併排序 快速排序 堆排序 基數排序。1.演算法思想 每次在未排序的元素中兩兩比較找最大值,邊找邊從後往前儲存 未排序.第i大 第2大 第1大 一般情況,整個氣泡排序只需進行 k 1 k氣泡排序結束的條件是 在某一趟排序過程中沒...
資料結構與演算法07 陣列
1 陣列是什麼 1 陣列是資料結構最基本結構,可以看成是線性表推廣。2 幾乎所有程式語言都把陣列設定成基礎固定的基礎變數型別。2 陣列結構 陣列在記憶體中是連續存放,並且儲存資料的記憶體也是連續的,可通過索引值直接訪問。3 陣列基本操作 由陣列的儲存結構可知,陣列具有查詢遍歷,增刪困難的特點。陣列新...
python演算法與資料結構 07查詢
1.遞迴版本 def binarysearch1 alist,item 二分查詢前提 有序陣列 二分查詢遞迴版本 時間複雜度 o logn n len alist if0 n return false mid n 2if alist mid item return true elif alist m...