大話數據結構4 - 樹

線性結構:一對一
樹結構:一對多

樹:是n(n>=0)個結點的有限集

樹tree
空樹,根root,子樹subtree
注意:根結點是唯一的,子樹之間一定互不相交
結點:包含一個數據元素和子樹分支
結點分類:根結點、內部結點、葉結點/終端結點leaf
結點的度,樹的度degree
結點的關係:孩子child、雙親parent、兄弟sibling,堂兄弟,祖先、子孫
注意:結點的子樹的根不是該結點,而是該結點孩子
結點的層次level,樹的深度/高度depth
有序樹,無序樹
森林forest

樹的抽象數據類型
樹中結點具有相同數據類型及層次關係

樹的存儲結構,前驅、後繼
雙親表示法:純數組法,順序存儲
孩子表示法:數組+單鏈表,順序存儲+鏈式存儲
孩子兄弟表示法:鏈式存儲,二叉樹
注意:頭指針指向根結點

二叉樹
每個結點最多有兩棵子樹,度不大於2
左右子樹有序
只有一棵子樹也要有序
特殊二叉樹:斜樹、滿二叉樹、完全二叉樹
二叉樹的性質
二叉樹的順序存儲結構:一般只用於完全二叉樹
二叉樹的鏈式存儲結構:二叉鏈表,三叉鏈表,線索鏈表

遍歷二叉樹,次序、訪問、所有結點、有且僅有一次被訪問
遍歷次序,從左到右:前序遍歷(根左右)、中序遍歷(左根右)、後序遍歷(左右根)、層序遍歷
算法:遞歸調用
遍歷結果的推導

二叉樹的創建:擴展二叉樹,使用遍歷的方式實現二叉樹的建立

線索二叉樹:線索,線索鏈表,線索二叉樹,雙向鏈表
線索化,標誌域:ltag、rtag,添加一個頭結點
線索化的實質就是將二叉鏈表中的空指針改爲指向前驅或後繼的線索
線索化的過程就是在遍歷的過程中修改空指針的過程
線索二叉鏈表的存儲結構的使用:需要經常遍歷、需要查找結點在某遍歷中的前驅或後繼

樹、森林與二叉樹的轉換

赫夫曼樹、最優二叉樹:帶權路徑長度WPL
赫夫曼編碼:最基本的壓縮編碼方法
前綴編碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章