樹:n(n≥0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹中:有且僅有乙個特定的稱為根的結點;當n>1時,其餘結點可分為m(m>0)個互不相交的有限集t1、t2、…、tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹。
相關概念
·度:結點擁有的子樹數。
·層次:從根開始,根為第一層,根的孩子為第二層。
·深度:(結點)所在的層次數。根結點的深度為1。
·高度:所有結點中深度的最大值。(空樹0)
·結點分類:葉結點(度數為0);內部結點;根結點。
·結點關係:祖先;後代;雙親;孩子;兄弟。
·森林:m(m ≥ 0)棵互不相交的樹的集合。
二叉樹:每個結點度數不超過2。
·有序二叉樹:樹中結點的各子樹看成從左至右有次序,不能交換的二叉樹。
·真二叉樹:不含1度結點的二叉樹。
·滿二叉樹:結點 n ,高度 h ,滿足 n = 2^h - 1。(所有葉子都在同一層)
·斜樹:結點都只有左子樹或右子樹。
·完全二叉樹:具有n個結點的二又樹按層序編號,如果編號為i(1 ≤ i ≤ n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中位置完全相同。
書的儲存結構表示方法:雙親表示法、孩子表示法、孩子兄弟表示法。
·雙親表示法
資料域指標域
data
parent (firstchild / rightsib)
·孩子表示法:需兩種結點結構(孩子鍊錶的孩子結點;表頭陣列的表頭結點)
資料域指標域
child
next
data
(parent) firstchild
·孩子兄弟表示法
資料域指標域
指標域data
firstchild
rightsib
二叉樹的性質
·第 i 層至多有2^(i - 1)個結點(i ≥1)。
·高度為h的二叉樹至多有2^h - 1 個結點(h ≥ 0)。
·若葉子結點數為 n_0,度數為2的結點數為 n_2,則 n_0 = n_2 + 1。
·n個結點的完全二叉樹,高度為 ⌊lo
g2n⌋
+1⌊ log_2 n ⌋ + 1
⌊log2
n⌋+1
。若按層序編號,對任一結點 i 都有
①若 i = 1,則結點 i 是二叉樹的根,無雙親;如果 i > 1,則其雙親是結點⌊ i / 2 ⌋。
②若 2i > n,則結點 i 無左孩子(結點 i 為葉子結點);否則其左孩子是結點 2i 。
③若 2i + 1 > n,則結點 i 無右孩子;否則其右孩子是結點 2i + 1。
(順序儲存結構一般只適用於完全二叉樹)
二叉鍊錶
指標域資料域
指標域lchild
二叉樹的遍歷
·前序遍歷:若二叉樹為空,則空操作返回,否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹。(中-左-右)
·中序遍歷:若樹為空,則空操作返回,否則從根結點開始(注意並不是先訪問根結點),中序遍歷根結點的左子樹,然後是訪問根結點,最後中序遍歷右子樹。(左-中-右)
·後序遍歷:若樹為空,則空操作返回,否則從左到右先葉子後結點的方式遍歷訪問左右子樹,最後是訪問根結點。(左-右-中)
·層序遍歷:若樹為空,則空操作返回,否則從樹的根結點開始訪問,從上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。
擴充套件二叉樹:將二叉樹每個結點的空指標引出乙個虛結點,其值為一特定值。
線索二叉樹:指向前驅和後繼的指標稱為線索,加上線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹就稱為線索二叉樹。對二叉樹以某種次序遍歷使其變為線索二又樹的過程稱做是線素化。
指標域資料域
指標域lchild
ltag
data
rtag
rchild
·ltag為0時指向該結點的左孩子,為1時指向該結點的前驅;tag為0時指向該結點的右孩子,為1時指向該結點的後繼。
樹、 森林、二叉樹間的轉換
· 樹轉換為二叉樹
①加線:在所有兄弟結點之間加一條連線。
②去線:只保留結點與長子的連線,刪除與其他孩子的連線。
③層次調整:以根結點為軸心,將樹順時針旋轉45°。
·森林轉換為二叉樹
①把每棵樹轉換成二叉樹。
②第一棵二叉樹不動,從第二棵二叉樹開始,依次將後一棵二叉樹的根結點作為前一棵二叉樹根結點的右孩子。
·二叉樹轉換為樹
①加線:若結點存在左孩子,則將該左孩子的右孩子、右孩子的右孩子等所有右孩子都作為該結點的孩子,並將該結點與這些右孩子連起來。
②去線:刪除原二叉樹中所有結點與右孩子的連線。
③層次調整。
·二叉樹轉換為森林
①從根結點開始,若右孩子存在, 則把與右孩子結點的連線刪除,再檢視分離後的二又樹;若右孩子存在,則繼續刪除連線,直到所有右孩子連線都刪除為止,得到分離的二叉樹。
②將每棵分離後的二又樹轉換為樹。
哈夫曼樹:帶權路徑長度wpl最小的二叉樹。
樹形結構遞迴 資料結構(六) 二叉樹的遍歷
本節課我們繼續二叉樹的話題。這節課,先介紹一下二叉樹的幾個相關的性質,這些性質很簡單,但卻是我們進行資料結構的效能分析的基礎。1.在二叉樹的第 i 層上至多有 這個性質是顯然的,第一層有1個,第二層最多隻可能是第1層的兩倍,第三層是第二層的兩倍。2.深度為 k 的二叉樹,最多有 這條性質由 1 可以...
六 二叉樹和紅黑樹
或者是一棵空樹 或者是具有下列性質的二叉樹 它是一棵空樹 或它的左右兩個子樹的高度差 平衡因子 的絕對值不超過1 平衡二叉樹 每個結點的平衡因子都為1 1 0 的二叉排序樹。或者說每個結點的左右子樹的高度最多差1 的二叉排序樹。平衡二叉樹的目的是為了減少二叉查詢樹層次,提高查詢速度 r b tree...
演算法精解(六) 二叉樹
二叉樹是一種將結點按照層次結構組織起來的資料結構,每個結點最多只有兩個與它直接關聯的子節點。類似於細胞 一樣,1 2,2 4,4 8.先序遍歷 1,訪問根節點,2.左節點,3.右節點 屬於深度優先遍歷 中序遍歷 1.訪問左節點,2.根節點,3.右節點 後序遍歷 1.訪問左節點,2.右節點,3.根節點...