資料結構與演算法筆記 lesson 19 二叉樹

2021-07-25 08:32:22 字數 1293 閱讀 9267

二叉樹(binary tree)是 n(n>=0)個結點的有限集合,該集合或者為空集(空二叉樹),或者由乙個根結點和兩課互不相交的、分別稱為根結點和左子樹和右子樹的二叉樹組成。

每個結點最多有兩棵子樹,所以二叉樹中不存在度大於2的結點。

空二叉樹

只有乙個根節點

根節點只有左子樹

根節點只有右子樹

根節點既有左子樹又有右子樹

斜樹
左斜,右邪

滿二叉樹
葉子只能出現在下一層

非葉子結點的度一定是2

在同樣深度的二叉樹中,滿二叉樹的結點個數一定最多,同時葉子也是最多

完全二叉樹
對一棵具有n個結點的二叉樹暗層序編號,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點位置完全相同,則這棵二叉樹稱為完全二叉樹

葉子結點只能出現在最下兩層

最下層的葉子一定集中在左部連續位置

倒數第二層,若有葉子結點,一定都在右部連續位置

如果結點度為1,則該結點只有左子節點

同樣結點數的二叉樹,完全二叉樹的深度最小

性質
在二叉樹的第i層上至多有2^(i-1)個結點(i>=1)

深度為k的二叉樹至多有2^k-1個結點(k>=1)

對任何一課二叉樹t,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1

具有n個結點的完全二叉樹的深度為[log2n ]+1

如果一棵有n個結點的完全二叉樹(其深度為[log2n ]+1)的結點按層序編號,對任一結點i(1<=i<=n)有以下性質:

如果 i=1,則結點 i 是二叉樹的根,無雙親;如果i>1,則其雙親是結點[i/2]

如果2i>n,則結點i不是左節點(結點i為葉子結點);否則其左子節點是2i

如果2i+1>,n則結點i不是右節點(結點i為葉子結點);否則其右子節點是2i+1

二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的各個節點,並且結點的儲存位置能體現結點之間的邏輯關係

二叉樹一般採用鏈式儲存結構

typedef struct bitnode

bitnode,*bitree;

資料結構與演算法筆記 lesson 16 八皇后問題

在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。includeint count 0 int notdanger int row,int j,int chess 8 判斷左上方 for i row,k j i 0 k 0 i k...

資料結構與演算法筆記 lesson 13 佇列

是只允許在一端繼續插入操作,而在另一端進行刪除操作的線性表。是一種先進先出 fifo 的線性表。輸入快取區接收鍵盤的輸入就是按佇列的形式輸入和輸出的 棧一般用順序表來實現,佇列常用鏈來實現 typedef struct qnode qnode queueprt typedef struct link...

資料結構與演算法 筆記 資料結構與演算法筆記 棧

以前學習的時候都沒怎麼好好的做過筆記,總是東記一點,西寫一點,甚至都不做筆記,導致後面找的時候找不到,最後還是求助搜尋引擎浪費掉很多時間。好腦筋不如個爛筆頭呀。這次又重新學習python的資料結構及演算法 中國mooc上的公開課 就好好做個筆記吧。棧是一種只能在一端進行插入和刪除的線性資料結構。一般...