資料結構07

2021-10-23 11:49:56 字數 2470 閱讀 2026

樹型結構:

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...