注:本文內容來自電子工業出版社《軟體設計師考試輔導教程》2023年3月第1版
1.1 樹
1.1.1樹的基本概念
樹是由乙個或多個節點組成的有限集合t,它滿足如下兩個條件:
1)有乙個特定的結點,稱為根節點
2)其餘的節點分成m(m>=0)個互不相交的有限集合。其中每個集合又都是一棵樹,稱t1,t2,…,tm-1為根結點的子樹。
上圖為樹結構示意圖,由上圖可知:
1.一棵樹由子樹構成,子樹又由更小的子樹構成。
2.由條件1)可知,一棵樹至少有乙個結點(根結點)。=》上圖根結點為1
3.乙個結點的子樹數目稱為該結點的度(次數),樹中各結點的度的最大值稱為樹的度(樹的次數)=》結點1的度為3,結點2的度為4,該樹的度數為4
4.度為0的結點稱為葉子結點(樹葉),除葉子結點外的所有節點稱為分支結點,根以外的分支結點稱為內部結點
定義一顆樹的根結點所在的層次為1,其他結點所在的層次等於它的父結點所在的層次+1。樹種各結點的層次的最大值稱為樹的層次。
1.1.2 樹的常用儲存結構
因為樹是非線性的,為了儲存樹,必須要把樹中結點之間的關係反應在儲存結構中
1)標準儲存結構:樹種的結點內容可分為兩部分,結點的資料和指向結點的指標資料。對於n度樹,在其標準儲存結構中指標陣列有n個元素
2)帶逆儲存結構:在標準儲存結構的基礎上增加乙個指向其父結點的指標
1.1.3 樹的遍歷(重點)
前序遍歷:首先訪問根結點,然後從左到右按前序遍歷根結點的各棵子樹
後序遍歷:首先從左到右按後序遍歷根結點的各棵子樹,然後訪問根結點
層次遍歷:首先訪問處於0層上的根節點,然後從左到右依次訪問處於1層上的結點,再從左到右依次訪問處於2層上的結點等,即自上而下,從左到右逐層訪問樹中的各層上的結點。
以此圖為例:
前序遍歷:1,2,5,6,7,8,3,4,9,a,b
後序遍歷:5,6,7,8,2,3,a,b,9,4,1
層次遍歷:1,2,3,4,5,6,7,8,9,a,b
*1.2 二叉樹 binarytree*
1.2.1 二叉樹的基本概念
二叉樹是乙個有限的結點集合,該集合或者為空,或者由乙個根結點及兩棵互不相交的左,右二叉子樹所組成。二叉樹的結點中有兩棵子二叉樹,分別稱為左子樹和右子樹。因為二叉樹可以為空,所以二叉樹中的結點可能沒有子結點,也可能只有乙個左子結點or右子結點,也可能同時有左右兩個子節點。下圖所示為二叉樹的4種不同形態,如果算上空二叉樹,那麼其實一共有五種形態。
二叉樹常採用類似樹的標準儲存結構來儲存,c語言定義如下:
typedef
struct btnodebtnode;
1.2.2 二叉樹的性質
性質1:在二叉樹的第i層上至多有2^(i-1)個結點(i>=1)
性質2:深度為k的二叉樹至多有2^k-1個結點(k>=1)
性質3:對任何一棵二叉樹,如果其葉子結點數為n0,度為2的結點數為n2,則n0=n2+1
一棵深度為k且有2^k-1(k>=1)個結點的二叉樹稱為滿二叉樹。
上圖所示即為一棵滿二叉樹
由上圖可以看到:第三層上最多有2^(3-1)=4個結點,深度為3的它至多有2^3-1=7個結點,現在它的葉子結點數為4,度數為2的結點數為3(1,2,3),所以4=3+1
如果深度為k,有n個結點的二叉樹中各結點能夠與深度為k的順序編號的滿二叉樹從1到n標號的結點對應,則稱這樣的二叉樹為完全二叉樹。
所以下圖中,最左邊的是完全二叉樹,其餘兩棵都是非完全二叉樹。
根據完全二叉樹的定義,在一顆完全二叉樹中,所有的葉子結點都出現在第k層或k-1層(最後兩層)
性質4:具有n(n>0)個結點的完全二叉樹的深度為
性質5:如果對一棵樹有n個結點的完全二叉樹的結點按層序編號(從第一層到第
1.2.3 二叉樹的遍歷
性質6:一棵二叉樹的前序序列和中序序列可以唯一地確認這棵二叉樹
例如:某二叉樹的前序序列為abhfdeckg,中序序列為hbdfaekcg,則構造二叉樹的過程:
前序序列確定a為根結點,中序序列把a左右分開
根據前序序列的定義,確定b是a的左邊子結點,取b,將b的子結點分為h和fd兩個
取出d
至此左子樹完畢,我們殺入右子樹
取e
觀察前序序列並結合中序序列,取出c
取k和g的過程省略
二叉樹 滿二叉樹和完全二叉樹
二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹和完全二叉樹
二叉樹規律 假設根節點的高度為0 二叉樹是每個節點至多只有兩個節點的樹 深度為i所在的層至多有 2 i個節點 高度為k的二叉樹至多有2 k 1 1個節點 n0表示度為0的節點,n2表示度為2的節點,存在n0 n2 1 對所有樹有 節點個數 邊數 1 完全二叉樹規律 節點數為n的完全二叉樹,其高度為 ...