1. 程式人生 > >完美二叉樹、完全二叉樹、完滿二叉樹

完美二叉樹、完全二叉樹、完滿二叉樹

1、二叉樹(Binary Tree)

1.1 什麼是二叉樹(Binary Tree)

每個結點至多擁有兩棵子樹(即二叉樹中不存在度大於2的結點),並且,二叉樹的子樹有左右之分,其次序不能任意顛倒。

1.2 二叉樹的性質

  1. 若二叉樹的層次從0開始,則在二叉樹的第i層至多有2^i個結點(i>=0)。
  2. 高度為k的二叉樹最多有2^(k+1) - 1個結點(k>=-1)。 (空樹的高度為-1)
  3. 對任何一棵二叉樹,如果其葉子結點(度為0)數為m, 度為2的結點數為n, 則m = n + 1。

2、完美二叉樹

一個深度為k(>=-1)且有2^(k+1) - 1個結點的二叉樹稱為完美二叉樹


換句話說:樹是滿的,還是二叉的
圖是這樣的:
這裡寫圖片描述

3、完全二叉樹(Complete)

完全二叉樹從根結點到倒數第二層滿足完美二叉樹,最後一層可以不完全填充,其葉子結點都靠左對齊

下圖就不是一棵完全(Complete)二叉樹
這裡寫圖片描述
如果將編號11(K)結點從編號6(E)的左兒子位置移動到編號5(E)的右兒子位置,則變成一棵完全(Complete)二叉樹。

  • 其實,理解完全(Complete)二叉樹可以藉助於棧(stack)的思想。 例如,把第一個圖中的完美(Perfect)二叉樹的所有結點按照編號1, 2, 3, …, 15依次入棧(push)。 那麼,對棧的每一次出棧(pop)操作後,棧裡儲存的結點集
    對應到圖上去都是一棵完全(Complete)二叉樹

4、完滿二叉樹

所有非葉子結點的度都是2
換句話說:只要你有孩子,你就必然是有兩個孩子。

例:
一個具有767個節點的完全二叉樹,其葉子節點的個數為____
A . 383
B . 384
C . 385
D . 386

n = n2+n1+no
n0 = n2 + 1

可得方程:n0= (768-n1) / 2,又因完全二叉數節點為1的數要不為1要不為0,故選B。

  • n:總節點數
  • n2:度為2的節點數
  • n1:度為1的節點書
  • n0:度為0節點數