理论基础 —— 二叉树
【二叉樹的定義】
二叉樹( binary tree)是 n 個結點的有限集合,該集合或為空集(空二叉樹),或由一個根結點與兩棵互不相交的,稱為根結點的左子樹、右子樹的二叉樹構成。
二叉樹的特點是:
- 每個結點最多有兩棵子樹,故二叉樹中不存在度大于 2 的結點
- 二叉樹是有序的,其次序不能任意顛倒,即使樹中的某個結點只有一棵子樹,也要區分它是左子樹還是右子樹
二叉樹具有以下 5 種基本形態:
【特殊的二叉樹】
在實際應用中,常會用到以下幾種特殊的二叉樹。
1.斜樹
所有的結點都只有左子樹的二叉樹稱為左斜樹,所有的結點都只有右子樹的二叉樹稱為右斜樹
在斜樹中,每層只有一個結點,因此斜樹的結點個數與其深度相同
2.滿二叉樹
在一棵二叉樹中,若所有的分支結點都存在左子樹和右子樹,且所有的葉子都在同一層上,則稱為滿二叉樹。
其特點是:
- 葉子只能出現在最下一層
- 只有度為 0、度為 2 的結點
由于滿二叉樹的特性可知:滿二叉樹在同樣深度的二叉樹中結點個數、葉結點個數最多。
3.完全二叉樹
對一棵具 n 個結點的二叉樹按層序編號,若編號為 i 的結點與同樣深度的滿二叉樹中編號 i 的結點在二叉樹中的位置完全相同,則稱為完全二叉樹,那么顯然有:滿二叉樹是完全二叉樹
其特點是:
- 葉結點只能出現在最下兩層,且最下層的葉結點都集中在二叉樹左側連續的位置
- 若有度為 1 的結點,只可能有一個,且其只有左孩子
- 深度為 k 的完全二叉樹在 k -1 層上行一定是滿二叉樹
簡單來說,在滿二叉樹中,從最后一個結點開始,連續去掉任意個的結點,即是一棵完全二叉樹
【二叉樹的性質】
1.二叉樹的第 i 層上行最多有??個結點
2.在一棵深度為 k 的二叉樹中,最多有? 個結點,最少有 k 個結點
推論:深度為 k 且具? 個結點的二叉樹一定是滿二叉樹,但深度為 k 具有 k 個結點的二叉樹不一定是斜樹
3.具有 n 個結點的二叉樹,其分支數:B=n-1,對于任意一個結點,每度貢獻一個分支,即:度為 0 的結點貢獻 0?個分支,度為 1 的結點貢獻 1 個分支,度為 2 的結點貢獻 2 個分支。
4.在一棵二叉樹中,若葉結點個數為 ,度為 2 結點個數為 ,那么有:
5.具有 n 個結點的完全二叉樹的深度為?
6.對一棵具有 n 個結點的完全二叉樹,從 1 開始按層序編號,則對于任意編號 i 的結點,有:
- 若 i=1,則:結點 i 為根節點;若 i>1,則:結點 i 的父結點編號為?
- 若 2i<=n,則:結點 i 的左孩子編號為 2i;若 2i>n,則結點 i 無左孩子
- 若 2i+1<=n,則:結點 i 的右孩子編號為 2i+1;若 2i+1>n,則結點 i 無右孩子
【二叉樹的遍歷】
二叉樹中最基本的操作是遍歷。
二叉樹的遍歷是從根節點出發,按照某種次序訪問二叉樹中的所有結點,使得每個結點僅被訪問一次。
根據二叉樹的定義可知:一棵二叉樹由根節點、根節點的左子樹、根節點的右子樹三部分構成,因此只要遞歸的遍歷這三部分即可遍歷整棵樹。
二叉樹的遍歷通常分為四種方式:
- 前序遍歷:先訪問根結點,再前序遍歷根節點的左子樹,然后再前序遍歷根節點的右子樹(根左右)
- 中序遍歷:先中序遍歷根結點的左子樹,再訪問根節點,然后再中序遍歷根結點的右子樹(左根右)
- 后序遍歷:先后序遍歷根結點的左子樹,再后序遍歷根結點的右子樹,然后再訪問根結點(左右根)
- 層次遍歷:從根節點開始,按層次從小到大逐個訪問,同一層次按照從左到右的次序
二叉樹遍歷的性質:
- 已知前序遍歷序列和中序遍歷序列,可以確定唯一的一棵二叉樹
- 已知后序遍歷序列和中序遍歷序列,可以確定唯一的一棵二叉樹
【二叉樹的存儲結構】
二叉樹的存儲結構分為:順序存儲結構、二叉鏈表、三叉鏈表、線索鏈表等,其各有優劣,在應用時應根據實際情況靈活使用。
- 順序存儲結構:點擊這里
- 二叉鏈表:點擊這里
- 三叉鏈表:點擊這里
- 線索鏈表:點擊這里
【樹、森林、二叉樹的轉換】
從樹的孩子兄弟表示法和二叉樹的二叉鏈表表示法可以看出,樹的孩子兄弟表示法實質上是二叉樹的二叉鏈表存儲形式,因此,從物理結構上來看,兩者是相同的,只是解釋不同。
因此,以二叉鏈表為媒介,可導出樹與二叉樹間的對應關系,也就是說,給出一棵樹,可以找到一棵唯一的二叉樹與之對應,這樣一來,對樹的操作即可借助二叉樹的存儲,利用二叉樹上的操作實現。
具體內容:點擊這里
【哈夫曼樹及哈夫曼編碼】
哈夫曼樹(Huffman Tree)又稱最優二叉樹,而哈夫曼編碼(Huffman Coding)又稱最優編碼,是一種編碼方式,屬于可變字長編碼(VLC)一種,其根據字符出現的概率來構造異字頭的平均長度最短的碼字。
哈夫曼樹與哈夫曼編碼是二叉樹的經典應用,在實際中有著廣泛的應用。
具體內容:點擊這里
總結
以上是生活随笔為你收集整理的理论基础 —— 二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树形结构 —— 并查集 —— 带权并查集
- 下一篇: 一元三次方程求解(信息学奥赛一本通-T1