資料結構複習之四 樹與二叉樹

2021-08-20 20:52:06 字數 1863 閱讀 6115

(一) 樹的基本概念(其實我覺得樹的概念是不會考的)

樹是n個節點的有限集合, n=0時, 稱為空樹

1) 有且僅有乙個特定的節點為根

2) 其餘節點又可以分為m個互不相交的有限集合, 乙個集合本身又是一棵樹

深度是針對節點的, 從上往下算; 高度是針對子樹的, 從下往上算

有序樹和無序樹: 子樹從左到右是不是有順序

樹的度數: 節點擁有的子樹的數量. 所有節點度數之和=所有節點數-1

(二) 二叉樹

定義: 每個節點至多有兩棵子樹, 且有左右之分, 不能顛倒 (增強版的有序樹)

滿二叉樹: 高度為h, 含有2^h-1個結點的二叉樹

完全二叉樹: 每個結點都與相同高度的滿二叉樹中編號為1~n的節點一一對應

順序儲存結構: 適用於完全二叉樹和滿二叉樹. 通過節點序號反應邏輯關係. 優點: 節省儲存空間.

對於一般的二叉樹, 要想通過下標反映邏輯關係, 只能新增一些並不存在的空結點

鏈式儲存結構: left right data

二叉樹的遍歷方式: 

線索二叉樹 將傳統二叉鍊錶中的空指標改為存放其直接前驅或後繼的指標

遍歷方法

// 求中序線索二叉樹下某節點的下乙個結點(左節點)

threadnode* firstnode(threadnode* p)

// 求中序線索二叉樹某節點的後繼結點(右結點)

threadnode* nextnode(threadnode* p)

// 中序遍歷

void inorder(threadnode* t)

}

(三) 樹、森林儲存結構:

1) 雙親表示法儲存父親節點

2) 孩子表示法將孩子節點用鍊錶連起來

3) 孩子兄弟表示法又稱二叉樹表示法 儲存第乙個孩子和下乙個的兄弟

樹和森林與二叉樹的應用 

(四) 樹與二叉樹的應用

樹的應用: 並查集

二叉排序樹(左子樹上的所有值《根結點的值《右子樹上所有結點的值)

常用操作: 查詢 插入 構造 刪除

平衡二叉樹

插入: 為了保證平衡, 每次當在二叉樹插入或刪除乙個結點時, 要檢查其插入路徑上的結點是否出現不平衡

參考資料: 

哈夫曼編碼

評價方法: 帶權路徑長度wpl

哈夫曼樹的構造: 給定n個權值為w的結點, ........

資料結構二叉樹複習

1 節點的定義 template class treenode treenode elem e,treenode l null,treenode r null treenode bool isleaf 2 二叉樹 鍊錶法 由上往下建樹 template class tree tree void in...

資料結構 樹與二叉樹

一 性質 1 在二叉樹中,第i層的結點總數不超過2 i 1 2 深度為h的二叉樹最多有2 h 1個結點 h 1 最少有h個結點 3 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0 n2 1 4 具有n個結點的完全二叉樹的深度為int log2n 1 5 給定n個節點,能...

資料結構 樹與二叉樹

1 樹的定義 樹是一種 非線性的資料結構。樹是n n 0 個結點的有限集,在任意一棵非空樹中 1 有且僅有乙個特定的被稱為 根 root 的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是一棵樹,並且稱為根的 子樹 subtree 3 每棵子樹也是由唯一的根結...