資料結構筆記——二叉樹的定義和性質

Android機動車發表於2018-05-02

獲取更多精彩內容,您還可以關注我的微信公眾號——Android機動車

在一些電視節目中,會猜測商品價格,有的人是一點一點的數字累加,這樣的策略效率太低了。其實有一種經典的折半查詢演算法,就類似於我們今天要說的二叉樹。

二叉樹定義

二叉樹:是n(n>=0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。

如下圖就是一個二叉樹:

這裡寫圖片描述

二叉樹特點

二叉樹的特點有:

  • 每個結點最多兩個子樹,所以二叉樹中不存在度大於2的結點。注意不是隻有兩棵子樹,而是最多有。沒有子樹或者有一棵子樹都是可以的。
  • 左子樹和右子樹是有順序的,次序布恩那個任意顛倒。
  • 即使樹中的某結點只有一棵子樹,也要區分它是左子樹還是右子樹。如圖:樹1和樹2是同一棵樹,但卻是不同的二叉樹。

這裡寫圖片描述

二叉樹具有五種基本形態:

  1. 空二叉樹;
  2. 只有一個根結點;
  3. 根結點只有左子樹;
  4. 根結點只有右子樹;
  5. 根結點既有左子樹又有右子樹。

特殊二叉樹

再來介紹一些特殊的二叉樹。

1、斜樹

顧名思義,斜樹一定是斜的,但是往那邊斜還是有講究的。

所有的結點都只有左子樹的二叉樹叫左斜樹,所有結點都是隻有右子樹的二叉樹叫右斜樹。兩種統稱為斜樹。

下面兩個圖分別就是左斜樹和右斜樹:

這裡寫圖片描述

這裡寫圖片描述

2、滿二叉樹

蘇東坡有詩云:人有悲歡離合,月有陰晴圓缺,此事古難全。意思就是完美是理想,不完美才是人生。

我們通常看到的例子全是左高右低、參差不齊的二叉樹,是否有完美的二叉樹呢。

在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有的葉子結點都在同一層上,這樣的二叉樹叫做滿二叉樹。如圖

這裡寫圖片描述

單單是每個結點都有左右子樹,不能算是滿二叉樹,還必須要所有的葉子結點都處在同一層,這樣就做到了二叉樹的平衡。因此滿二叉樹的特點有:

  1. 葉子只能出現在最下面一層,出現在其他層就不能達到平衡;
  2. 非葉子結點的度一定是2;
  3. 同樣深度的二叉樹中,滿二叉樹的結點個數最多,葉子樹最多。

3、完全二叉樹

**對一棵具有n個結點的二叉樹按層序編號,如果編號為i(1<=i<=n)的結點與同樣深度的滿二叉樹中編號為i的結點在二叉樹中位置完全相同,則這棵二叉樹稱為完全二叉樹。**如圖:

這裡寫圖片描述

首先要從字面上區分,“完全”和“滿”的差異,滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿的。

注意完全二叉樹中的編號與滿二叉樹中的相同,而且編號全部連續,有斷開的就不是完全二叉樹,如下圖中的三棵樹都不是完全二叉樹。

這裡寫圖片描述

完全二叉樹的特點:

  1. 葉子結點只能出現在最下面兩層;
  2. 最下層的葉子一定集中在左部連續位置;
  3. 倒數二層,若有葉子結點,一定都在右部連續位置;
  4. 如果結點的度為1,則該結點只有左孩子,即不存在只有右子樹的情況;
  5. 同樣結點數的二叉樹,完全二叉樹深度最小。

我們也得出一個判斷某二叉樹是否是完全二叉樹的方法,那就是看著樹的示意圖,心中默默給每個結點按照滿二叉樹的結構逐層順序編號,如果編號出現空擋,就說明不是完全二叉樹,否則就是。

二叉樹的性質

二叉樹有一些需要理解並記住的特性,便於更好地使用它。

二叉樹性質1

在二叉樹的第i層上至多有2i-1個結點(i>=1)。

這裡寫圖片描述

上圖中: 第1層: 1個: 21-1=20=1 第2層: 1個: 22-1=21=2 第3層: 1個: 23-1=22=4 第4層: 8個: 24-1=23=8

通過資料歸納法,很容易得出在二叉樹的第i層上最多有 2i-1個結點。

二叉樹性質2

深度為k的二叉樹最多有2k-1個結點(k>=1)。

這裡注意是2的k次冪再減1。

如果有一層,最多1=21-1個結點 如果有兩層,最多1+2=22-1個結點 如果有三層,最多1+2+4=23-1個結點 如果有四層,最多1+2+4+8=24-1個結點

通過資料歸納法的論證,可以得出如果有k層,結點數最多為2k-1。

二叉樹性質3

對任何一棵二叉樹T,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1

終端結點就是葉子結點,而一棵二叉樹,除了葉子結點外,剩下的就是度為1和2的結點了,設n1是度為1的結點數。則樹T的結點總數就是n=n0+n1+n2

這裡寫圖片描述

我們換個角度,再數一數連線線,由於根結點只有分支出去,沒有分支進入,所以分支線總數為結點總數減去1,n-1=n1+2n2,又因為n=n0+n1+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 。

下篇文章會講到二叉樹的儲存結構和遍歷二叉樹,希望大家持續關注。

更多精彩內容,歡迎關注我的微信公眾號——Android機動車。

這裡寫圖片描述

相關文章