一、樹的定義與基本術語
1、樹的定義
- 樹是n(n>=0)個結點的有限集合
- 如果n=0,稱為空樹;
- 如果n>0, 稱為非空樹, 對於非空樹:
(1)有且僅有一個特定的稱為根(Root)的結點;
(2)當n>1時,其余結點可分為m(m>0)個互不相交的有限集T1、T2、……、Tm,其中每一個集合本身又是一棵樹,並且稱為根的子樹(SubTree)。
(此為遞歸定義)
注意:
1.n>0時根結點是唯一的,不可能存在多個根結點。
2.m>0時,子樹的個數沒有限制,但它們一定是互不相交的。
2、樹的基本術語
結點分類
- 結點:包含一個數據元素及若干指向其子樹的分支
- 結點的度:結點擁有的子樹數
- 葉結點(終端結點):度為0的結點[沒有子樹的結點]
- 分支結點(非終端結點):度不為0的結點[包括根結點],除根結點之外分支結點也稱內部結點
結點間的關系
- 孩子:結點的子樹的根[直接的后繼,可能有多個]
- 雙親:孩子的直接前驅[最多只能有一個]
- 兄弟:同一雙親的孩子
- 子孫:以某結點為根的樹中的任一結點都稱為該結點的子孫
- 祖先:從根到該結點所經分支上的所有結點
樹的其他相關概念
- 層次:根結點為第一層,其孩子為第二層,依此類推
- 深度:樹中結點的最大層次
- 有序樹:子樹之間存在確定的次序關系。
- 無序樹:子樹之間不存在確定的次序關系。
(如果將樹中結點的子樹看成從左至右是有次序的,不能互換的,則該樹稱為有序樹,否則稱為無序樹。) - 森林:互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林。
任何一棵非空樹是一個二元組: Tree = (root,F)
其中:root 被稱為根結點,F被稱為子樹森林
線性結構與樹結構區別
二、二叉樹
對於這種在某個階段都是兩種結果的情形,比如開和關、0和1、真和假、上和下、對與錯、正面和反面等,都適合用樹狀結構來建模,而這種樹是很特殊的樹狀結構,叫做二叉樹。
1、二叉樹的定義
-
二叉樹(Binary Tree)是n(n≥0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。如下圖:
-
每個結點最多有兩棵子樹,所以二叉樹中不存在度大於2的結點。
-
左子樹和右子樹是有順序的,次序不能任意顛倒。
-
即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。如下圖,樹1和樹2是同一棵樹,但它們卻是不同的二叉樹。
-
二叉樹具有五種基本形態:
- 空二叉樹;
- 只有一個根結點;
- 根結點只有左子樹;
- 根結點只有右子樹;
- 根結點既有左子樹又有右子樹。
如果有三個結點,則存在如下五種二叉樹:
2、特殊的二叉樹
斜樹
所有結點都只有左子樹的二叉樹叫左斜樹。所有結點都只有右子樹的二叉樹叫右斜樹。
- 斜樹有很明顯的特點,就是每一層都只有結點,結點的個數與二叉樹的深度相同。
- 其實線性表的結構可以理解為樹的一種極為特殊的表現形式。
滿二叉樹
在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子都在同一層上,這樣的二叉樹稱為滿二叉樹
如下圖:
- 滿二叉樹的特點:
- 葉子只出現在最下一層,出現在其他層就不可能達到平衡。
- 非葉子結點的度一定是2。
- 在同樣深度的二叉樹中,滿二叉樹的結點個數最大,葉子個數也最多。
完全二叉樹
如果對一顆有n個結點的二叉樹按層序排序,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中位置完全相同,則稱這顆二叉樹為完全二叉樹
- 完全二叉樹的一些特點
- 葉子結點只出現在最下面兩層
- 最下層的葉子一定集中在左部連續位置
- 倒數第二層,如果有葉子結點,一定在右部連續位置
- 如果結點度為1,則一定只有左孩子
- 同樣結點數的二叉樹,完全二叉樹的深度最小
3、二叉樹的性質
性質1
在二叉樹的第i層上至多有2i-1個結點(i>=1)
性質2
深度為k的二叉樹至多有2k-1個結點(k>=1)
性質3
對任意一個二叉樹,如果其終端結點數為n0,度為2的結點數為n2,則n0 = n2+1。
性質4
具有n個結點的完全二叉樹的深度為[log2n]+1([]表示向下取整)
性質5
如果對一顆有n個結點的完全二叉樹的結點按層序編號,對任意一個結點i(1<=i<=n)有:
1. 如果i=1,則結點i為二叉樹的根,無雙親;如果i>1,則其雙親為結點[i/2]。
2. 如果2i>n,則則結點i無左孩子(且結點i為葉子結點);否則其左孩子為結點2i。
3. 如果2i+1>n,則則結點i無右孩子;否則其右孩子為結點2i+1。