一、樹的邏輯結構
1、樹的定義採用遞迴方法
2、樹的基本術語:
①結點的度:結點所擁有的子樹的個數
②樹的度:樹中各結點度的最大值
③葉子結點:度為0的結點(終端結點)
④分支結點:度不為0的結點(非終端結點)
⑤結點所在層數和高度
⑥層序編號:(從上到下,從左到右)
⑦有序樹、無序樹:如果一顆樹中結點的各子樹從左到右是有次序的,稱這棵樹為有序樹;反之為無序樹
⑧森林:m(m≥0)棵互不相交的樹的集合
⑨同構:對兩棵樹,若通過對結點適當地重新命名,就可以使這兩棵樹完全相等(結點對應相等,結點對應關係也相等)
3、樹的抽象資料型別定義
adt tree
data
樹是由乙個根結點和若干棵子樹構成
樹中結點具有相同資料型別及層次關係
operation
inittree
前置條件:樹不存在
輸入:無
功能:初始化一棵樹
輸出:無
後置條件:構造乙個空樹
destroytree
前置條件:樹已存在
輸入:無
功能:求樹的根結點
輸出:樹的根結點的資訊
後置條件:樹保持不變、
parent
前置條件:樹已存在
輸入:結點x
功能:求結點x的雙親
輸出:結點x的雙親資訊
後置條件:樹保持不變
depth
前置條件:樹已存在
輸入:無
功能:求樹的深度
輸出:樹的深度
後置條件:樹保持不變
preorder
前置條件:樹已存在
輸入:無
功能:前序遍歷樹
輸出:樹的前序遍歷序列
後置條件:樹保持不變
postorder
前置條件:樹已存在
輸入:無
功能:後序遍歷樹
輸出:樹的後序遍歷序列
後置條件:樹保持不變
endadt
4、樹的便利操作:
①前序遍歷:從左到右
②後序遍歷:從左到右
③層序遍歷:自上而下,從左到右
5、雙親表示法中結點資料型別的定義
template
struct pnode
6、孩子表示法-多重鍊錶表示法(節點中的指標域表示孩子
①指標域的個數等於樹的度
②指標域的個數等於該結點的度
③孩子節點:
struct ctnode
;表頭節點:
template
struct cbnode
;7、孩子兄弟表示法
template
struct tnode;
二、二叉樹的邏輯結構
1、特點:
每個節點最多有兩棵子樹
二叉樹是有序的,其次序不能任意顛倒
二叉樹和樹是兩種樹結構
2、特殊二叉樹
左斜樹、右斜樹(斜樹-每一層只有乙個節點,結點個數與其深度相同
滿二叉樹
完全二叉樹
3、完全二叉樹的性質
在完全二叉樹中,結點的層序編號反映了結點之間的邏輯關係
三、二叉樹的遍歷操作
①前序(根)遍歷
訪問根節點
前序遍歷根節點的左子樹
前序遍歷根節點的右子樹
②中序(根)遍歷
中序遍歷根結點的左子樹
訪問根節點
中序遍歷根節點的右子樹
③後序(根)遍歷
後序遍歷根結點的左子樹
後序遍歷根節點的右子樹
訪問根節點
四、二叉樹的儲存結構及實現
二叉樹的順序儲存結構就是用一維陣列儲存二叉樹中的節點,並且節點的儲存位置應能體現節點之間的邏輯關係——父子關係
完全二叉樹和滿二叉樹中的節點的序號可以唯一的反映出節點之間的邏輯關係
五、二叉鍊錶
template
struct binode
{t data;
binode*ichild,*rchild;
六、非遞迴前序遍歷二叉樹
1、棧是實現遞迴的最常用的結構
2、二叉樹的建立:
按擴充套件前序遍歷序列輸入結點的值
如果輸入介電質為#,則建立一棵空的子樹
否則,根結點申請空間,將輸入值寫入資料域中
以相同方法的建立根結點的左子樹
以相同的方法建立根節點的右子樹
七、非遞迴中序遍歷二叉樹
遇到乙個節點,就把他推入棧中,並取遍歷他的左子樹
遍歷完左子樹後,從棧頂托出這個結點並訪問之,然後按照他的右鏈結指示的位址再去遍歷該節點的右子樹
八、後序遍歷——遞迴演算法
非遞迴後序遍歷二叉樹
①訪問當前節點p
②如果棧空,演算法結束
③否則,棧頂元素出棧,轉檢視p的標誌,如果標誌為right,進行下面的工作
④否則修改p的標誌,讓p重新入棧,p=p->rchild
執行九、非遞迴遍歷總結
前序:每個節點只進棧一次,在進棧前訪問節點
中序:每個節點進棧一次,在出棧是訪問節點
後序:每個節點進棧兩次,在第二次出棧時訪問幾點
十、計算樹的高度
1、高度的定義:max(左子樹高度,右子樹高度)+1
演算法分析:
從根節點出發開始計算
如果root==null,高度為0;
否則,分別計算左子樹高度;右子樹高度;返回max(左子樹高度,右子樹高度)+1
2、輸出中綴表示式
(a+(b×(c-d)))-(e/f)
基本思想:
中序遍歷左子樹前,輸出左括號
中序遍歷右子樹前,輸出右括號
十二、叉樹轉化為森林
加線、去線、層次調整
十二、哈夫曼編碼
十三、線索二叉樹
資料結構 樹和二叉樹
第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...
資料結構 樹和二叉樹
定義 二叉樹是n n 0 個節點的有限集合,該集合或者為空集 稱為空二叉樹 或者由乙個根節點和兩棵互不相交的 分別稱為根節點的左子樹和右子樹的二叉樹組成。特點 每個節點最多有兩棵子樹 二叉樹是有序的,其次序不能任意顛倒 斜樹 1.所有節點都只有左子樹的二叉樹稱為左斜樹 2.所有節點都只有右子樹的二叉...
資料結構 樹和二叉樹(二)
二叉樹 1 術語 其實樹中有很多術語的,這個是我們學習樹形結構必須掌握的。1 父節點,子節點,兄弟節點 這個就比較簡單了,b和c的父節點就是a,反過來說就是b和c是a的子節點。b和c就是兄弟節點。2 結點的度 其實 度 就是 分支數 比如a的分支數有兩個 b和c 那麼a的度為2。3 樹的度 看似比較...