(一) 樹的基本概念(其實我覺得樹的概念是不會考的)
樹是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 每棵子樹也是由唯一的根結...