二叉樹的有關計算


有關概念:https://www.cnblogs.com/schips/p/10630533.html

參考:  https://blog.csdn.net/bojie5744/article/details/30744767


 

計算公式

https://blog.csdn.net/stf1065716904/article/details/80874065

1. n個節點的二叉樹一共有((2n)!)/(n! * (n+1)!)種
 
  catalan數,C(n)=(1/(n+1))*((2*n)!/(n!*n!))

2. n層二叉樹的第n層最多為2^(n-1)個
3. 二叉樹節點計算公式 N = n0+n1+n2,度為0的葉子節點比度為2的節點數多一個。N=1*n1+2*n2+1
4. 對任何一棵二叉樹T,如果其終端節點數為n0,度為2的節點數為n2,則n0=n2+1
5. 具有n個節點的完全二叉樹的深度為log2(n) + 1
6. B-樹,除葉子與根節點以外的任意結點的分支數介於[m/2,m](取上整)
7. 具有n 個結點的完全二叉樹的深度為[log2n]+1


 

 二叉樹的度計算
有一個計算二叉樹節點的公式,相信很多人都知道:
  度為0的節點數為度為2的節點數加1,即n0=n2+1,知道這個公式,相關題目就可以輕松解決;

下面來討論下如何得出這個公式的:
設:
  k:總度數
  k+1:總節點數
  n0:度為0的節點
  n1:度為1的節點
  n2:度為二的節點

根據二叉樹中度和節點的守衡原理,可列出以下一組方程:
k=n2*2+n1;
k+1=n2+n1+n0;
將上面兩式相減得到:n0=n2+1;

例【1】:已知767個節點的完全二叉樹,求其葉子節點個數?
解析:

注意:

  對於深度為K的,有n個結點的二叉樹,當且僅當其每一個結點都與深度為K的滿二叉樹中編號從1至n的結點一一對應時稱之為完全二叉樹。

  也就是說,如果完全二叉樹有度為1的結點,那么也只有1或者0兩種情況


  n0=n2+1;
  n=n0+n1+n2;
  由上面,消掉n2得到:

  n=2n0+n1-1;

  由於完全二叉樹度為1的只有0個或1個兩種情況,所以,將0或1帶入上面公式,整理后得:
  n0=(n+1)/2或者n0=n/2;
  看看n是否能被2整除,能則用n0=n/2。否則用n0=(n+1)/2
  既:葉子節點為n0=(n+1)/2=384


 

例【2】:已知完全二叉樹的結點有700個,求其葉子結點的個數?
解析:  
  完全二叉樹,要求是除了最下面一層節點和部分倒數第二層節點外,所有節點均是滿樹。
  因此我們可以得到以下滿樹的規律:
  第一層:根節點 1個,即2^0個   

  第二層:兩個,即:2^1個

  第三層:4個,即:2^2個
     ....
    也就是說,n層滿樹的節點個數是: (根據等比數列求和公式)

等比數列前n項之和

①當q≠1時,
②當q=1時,
等比數列中,首項a1與 公比q都不為零.

注意:上述公式中a^n表示A的n次方

(也可以通過計算二進制中,從最低位開始的n位連續被置一的值求出前n項和)


      2^0+2^1+2^2+...+2^(n-1)=2^n-1
   所以:700個節點的完全二叉樹最多10層
   即第1-9層是滿樹,共有:511個節點
   也就是說:第十層還有:700-511=189個節點,這些節點全葉子節點
   於是完全二叉樹,最后一層最多有一個節點不滿,
   所以第9層左邊的95個節點是非葉子節點,
   因此第九層有:256-95=161個有葉子節點
   第十層有:189個葉子節點
   因此共有:189+161=350個葉子節點

總結以上,我們可以看到,在完全二叉樹中,
葉子節點的個數是:

  [(n+1)/2](n為奇數)

  或

   [n/2](n為偶數)




 

某二叉樹中有15個度為1的結點,16個度為2的結點,則該二叉樹中總的結點數為( )。

  • A.32
  • B.46
  • C.48
  • D.49
  • 參考答案:C
  • 解題思路:在樹結構中,一個結點所擁有的后件個數稱為該結點的度,所有結點中最大的度稱為樹的度。對任何一棵二叉樹,度為0的結點(即葉子結點)總是比度為2的結點多一個。由16個度為2的結點可知葉子結點個數為17,則結點結點總數為16+17+15=48,C選項正確。
  • n0 = n2 +1;   n = n0 + n1 + n2

 

 

 

 

 

 

 

1.二叉樹的深度和層數其實是一樣的。

2.任意一棵樹的總結點數等於總分支數+1

3.葉子結點也稱葉子,度為0的結點。

4.一個深度為n的滿二叉樹的總結點數為  (2^(n-1))  -1(其實得出這個結論畫個圖就知道了,不難)

5.深度為h的完全二叉樹至少有2^(h-1)個結點,最多有(2^h)-1個結點。

相關題目:

1.      一棵二叉樹第六層(根結點為第一層)的結點數最多為?

             其實這道題很簡單,就是2^5=32

 

2.     某二叉樹中度為2的結點有18個,則該二叉樹中有多少個葉子結點?

         根據總結點數=總分支數+1,設葉子有n個,則有

               18 + n = 18*2 + 1

                       n = 19

 

3.設一棵完全二叉樹共有199個結點,那么該二叉樹共有個分支結點?

思路就是先求出這個完全二叉樹的葉子數,然后用總結點數減去葉子數就是分支結點的數目了。

因為有                               (2^7) - 1<199<=(2^8)-1

所以得深度為8,前7層為滿二叉樹,所以前7層的總結點數為(2^7) - 1 = 127  ,第7層的結點數為 2^6 = 64

則最后一層的葉子為  199 - 127 = 72  ,所以第7層的葉子數為  64 - 72/2 = 28

所以總葉子數為   72+28 = 100

分支數為 199 -100 = 99

 

4.在深度為7的二叉樹中,最多有多少個葉結點?(注意這里問的是葉結點,而不是結點數,如果是結點數的話答案是(2^6)-1  )

這種題目和例子1差不多,為    2^6

 

5.設一棵完全二叉樹共有127個結點,那么該二叉樹是滿二叉樹嗎?

因為         一個深度為n的滿二叉樹的總結點數為  2^(n-1)-1

則設       2^(n-1)-1 = 127

                   n = 8 ,所以這也是滿二叉樹。

 

 

6.具有53個結點的完全二叉樹的深度為?

因為一個二叉樹的結點數必然不會超過深度一樣的滿二叉樹的結點數,所以有             (2^5) - 1<53<=(2^6)-1              

所以答案為6

 

7.設一棵完全二叉樹共有700個結點,則在該二叉樹中有多少 個葉子結點?

從第五題延伸出來的題目,由例6的思路得,           (2^9)-1  <700<=(2^10) - 1

所以得這棵二叉樹前面9層是滿二叉樹,則得前9層的總結點數為  (2^9)-1  = 512 -1 =511

則剩下來的結點數就是最后一層的結點數,為   700 - 511 = 189 ,把他湊成偶數為190,則也就是說,

最后一層是從第九層中  190/2= 95個結點延伸出來的,所以第九層失去了95個葉子,又因為第九層的

結點數為  2^8 = 256,則第九層的葉子數為  256 - 95,則所有的結點數為256-95 +189 =350

 

了解了第6題后,下面給出一道判斷題給大家,讓讀者來做判斷。是答案錯還是那位樓主錯?

 

 

例題待續

 

 

 
---------------------
作者:@heyun
來源:CSDN
原文:https://blog.csdn.net/bojie5744/article/details/30744767
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

 

 

 

完全二叉樹:葉子節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹。


1、一顆完全二叉樹上有600個節點,其中葉子節點的個數是?

簡便來算,就是 n0=n/2,其中n為奇數時(n1=0)向上取整;n為偶數時(n1=1)。可根據完全二叉樹的結點總數計算出葉子結點數。


---------------------
作者:野馬16
來源:CSDN
原文:https://blog.csdn.net/horacehe16/article/details/79618970
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM