樹-基礎
基本概念

https://raw.githubusercontent.com/arkulo56/thought/master/images/datastruct/tree.png
- 數據元素一對多的關系
- 根節點唯一
- 現實生活中一對多的關系很多
- 除了根節點,其他節點只有一個雙親節點
- 葉子節點無孩子,度為0
- 每個分支節點有一個雙親,多個孩子
- 子樹是分支節點和他的孩子組成的樹
- 森林是多個不相交的子樹
- 節點的度:節點的孩子數量
- 樹的度:節點度的最大值
- 深度:樹的層數
- 兄弟:同一深度,同一雙親的節點
- 堂兄弟:同一深度,不同雙親的節點
樹的存儲結構
樹不像二叉樹,沒有前、中、后序遍歷
樹也是用順序和鏈式存儲,但結構會比較靈活
雙親表示法
data | parent |
---|---|
一個元素包含兩個域(data,parent),數據域和指向雙親的指針(鏈式存儲),然后把多個元素保存在一個數組(順序存儲)中。
孩子表示法
data | child1 | child2 | ... | childn |
---|---|---|---|---|
同上,每個節點都保存在數組中,而每個節點的多個指針又指向了保存在數組其他位置上的孩子節點
孩子兄弟表示法
data | firstchild | rightsib |
---|---|---|
邏輯和上面兩種表示法相同
不同的表示法是為了解決不同的查詢需求,例如查詢是自下而上的,那就會用雙親表示法
總結
因為樹的度無法預知,也無法控制,存儲結構不容易實現,所以樹不常用,從而引申出了有規律可循的‘二叉樹’