教你一秒鐘得出 N個節點的完全二叉樹有多少個葉子節點 / 度爲1或2的節點個數

沒耐心的同學們可以直接拉到最底下看結論,有興趣的話可以瀏覽全篇文章

 

 

完全二叉樹的節點計算基本是幾類,要麼是求完全二叉樹中的葉子節點個數或者度爲1或者2的節點的個數。

其實這些問題根本上一一類問題,求解方法也是基本相同的。

 

先把題列出來:

一棵完全二叉樹具有1000個結點,則此完全二叉樹有多少個度爲2的結點?

完全二叉樹699個節點,則葉子節點有多少個?

已知完全二叉樹有30個節點,則整個二叉樹有多少個度爲1的節點?

 

類似於此類問題,其實用公式都很好解決。先來分析一下公式:

 

我們假設完全二叉樹有N個節點,度爲0的節點(葉子結點)爲N0 , 度爲1的節點爲N1 , 度爲2的節點爲 N2 。

我們可以得到公式一:

N = N0 + N1 + N2

求完全二叉樹中所有節點的總度數可以得到公式二:

總度數 = 0*N0 + 1*N1 + 2*N2

總度數其實我們可以理解成二叉樹的邊數之和,除了根節點之外,每個節點頭上都有一個邊。

所以我們可以得到公式三:

總度數 = N - 1

公式合並可以得到公式四:

N2 = N0 - 1 

所以說這類問題,求解出來葉子結點的個數,度爲2的節點的個數也就求解出來了(反之亦然)

 

那麼N1呢?

其實熟悉完全二叉樹定義的都應該知道,完全二叉樹中度爲1的節點只會是0個或者1個。

 

爲什麼呢?

不理解的話可以從滿二叉樹分析,滿二叉樹中只有葉子結點和度爲2的節點,

而完全二叉樹可以看成是滿二叉樹最後一層的節點從右至左連續的砍掉一些,

如果砍掉的節點個數是奇數,那麼完全二叉樹中度爲1的結點個數爲1

如果砍掉的節點個數是偶數,那麼完全二叉樹中度爲1的結點個數爲0

 

我們繼續分析,完全二叉樹不看最底層,上面實際上是個滿二叉樹。

若上面的滿二叉樹有k層,那麼我們根據公式,滿二叉樹的結點個數是(2^k) -1,(2^k) -1必定是個奇數。

我們完全二叉樹的總節點數N若是偶數,則最後一層的節點數必是奇數,則N1 = 1

N1 = 1
公式一:N = N0 + N1 + N2
公式四:N2 = N0 - 1

代入可以得到 N0 = N/2 

我們完全二叉樹的總節點數N若是奇數,則最後一層的節點數必是偶數,則N1 = 0

N1 = 0
公式一:N = N0 + N1 + N2
公式四:N2 = N0 - 1

代入可以得到 N0 = (N - 1)/2 

這裏的 減1 其實是可以忽略的,因爲N是奇數,我們直接除以2取整 和 (N - 1)/2 得到的結果相同

 

總結:

其實不論N爲奇數或者偶數的時候,葉子結點的個數就是結點數的一半 :N0 = N/2  (取整)

度爲2的節點個數就是 N/2 - 1 (取整)

注意:取整是向下取整,也就是忽略小數

求出的數據需要取整的話,就沒有度爲1的節點,反之就有,

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章