資料結構 陪讀筆記 第六章 樹

2021-09-27 13:24:29 字數 3759 閱讀 1250

將書中所有的加粗的基本概念摘錄出來了,方便自查。子樹根

度樹的度

葉子孩子

雙親兄弟

祖先子孫

層次堂兄弟

深度/高度:從1開始,從上往下。

有序樹/無序樹森林

二叉樹的左右結點是不能調換的,換了就不是同一棵樹了。

二叉樹可以視為一種公比為2的等比數列

將《資料結構》中的5個基本性質都簡單證明了一遍。

滿二叉樹:高度是h,同時有2^h - 1個結點。(判斷:全是結點)

完全二叉樹:按照滿二叉樹進行數,序號和位置可以按照滿二叉樹位置對上。

遞迴版本:什麼序,根在哪。

非遞迴版本:

//非遞迴先序遍歷: 根左右

void

preorder

(bitree t)

if(s.

empty()

==false)}

}

中序遍歷:

void

inorder

(bitree t)

//出來的時候一定是沒有左結點的//

p = s.

top();

//此時的棧頂必定是這個左結點的中結點//

s.pop()

;printf

("%c "

, p-

>data)

; p = p-

>rchild;

}

後序遍歷:

void

postorder

(bitree t)

else}}

}

層序遍歷:

void

levelorder

(bitree t)

if(p-

>rchild !=

null)}

}

線索二叉樹:ltag

lchild

data

rchild

rtag

雙親表示法

#include

#define maxsize 100

using

namespace std;

typedef

char elemtype;

//樹的結點定義

typedef

struct tnodetnode;

//樹的定義//

typedef

struct

tree;

孩子表示法

#include

#define maxsize 100

using

namespace std;

typedef

char elemtype;

//孩子結點的定義

typedef

struct cnodecnode ,

*child;

//樹的所有資料表

typedef

struct

tnode;

//樹的定義//

typedef

struct

tree;

孩子兄弟表示法

#include

#define maxsize 100

using

namespace std;

typedef

char elemtype;

//孩子結點的定義

typedef

struct csnodecsnode;

左孩右兄樹森林

二叉樹先根遍歷

先序遍歷

先序遍歷

後根遍歷

中序遍歷

中序遍歷

並查集用於kruskal演算法,借鑑了樹的思想,方便合併同類。

//初始化

void

init()

//並void

union

(int a ,

int b)

}//查

intfindfather

(int father,

int x)

return x;

}

左 < 根 < 右,中序遍歷可得乙個遞增序列。

查詢操作

bstnode *

bst_search

(bitree t , elemtype key , bstnode *

&p)return t;

}

插入

int

bst_insert

(bitree &t , keytype k)

else

if(k == t-

>key)

//如果這個數存在

return0;

else

if(k < t-

>key)

//比這個小左拐

return

bst_insert

(t->lchild , k)

;else

//比這個大右拐

return

bst_insert

(t->rchild , k)

;}

構造

void

creat_bst

(bitree &t , keytype str,

int n)

}

刪除此處不涉及**,只涉及思想。

左空補右,右空補左,左右不空,中序右補。(交換後單樹調整。)

查詢效率:可能出現單邊樹;靜態查詢錶用順序表,動態查詢表,二叉排序樹。asl會求,詳見asl樹問題。

平衡因子:|左樹高 - 右樹高|不超過1。

插入:ll,rr,lr,rl。**不平衡,**就調整,從下往上。(細節看書,不做深究。)

查詢:bst相同。

wpl最小,即為哈夫曼樹。

wpl的求法:樹的wpl = ∑(葉結點權值 * 路徑數)。

構造:池子拿出最小兩個點結合(權值相加),結合的結點放回池子裡再次操作,得一棵樹。權值越小,離根越遠;n個結點最後樹有2n - 1個結點,(結合一次多乙個結點)

編碼:左0右1。可得最短二進位制字首編碼,必是最優,但是不一定唯一。

資料結構第六章樹

第六章 樹 1.樹是n個結點的有限集。n 0時稱為空樹。在任意乙個非空樹中 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,其餘節點可分為m個互不相交的有限集,其中每乙個集合又是一棵樹,並成為根的子樹。2.結點分類 結點擁有的子樹稱為結點的度。度為0的結點稱為葉結點或終端節點 度不為0的結點稱為...

資料結構筆記 第六章

一.圖的儲存結構及實現 圖可以使用兩種儲存結構,分別是鄰接矩陣和鄰接表。鄰接矩陣以矩陣的形式儲存圖所有頂點間的關係。鄰接矩陣具有以下特點 1,鄰接矩陣是正矩陣,即橫縱維數相等。2,矩陣的每一行或一列代表乙個頂點,行與列的交點對應這兩個頂點的邊。3,矩陣的點代表邊的屬性,1代表有邊,0代表無邊,所以矩...

第六章 資料結構

存放同一種資料型別的多個元素的容器,通過索引 記憶體偏移量 進行元素的訪問,陣列的大小一旦確定就不能改變。陣列其實也是線性表結構,在記憶體中陣列的元素是緊挨著連續儲存的。特點 查詢快 增刪慢 舉例 定義乙個陣列 int arr new int 想在2的後面插入乙個新的元素11,這時候就需要定義乙個新...