1. 程式人生 > 其它 >完全二叉樹的葉子結點個數

完全二叉樹的葉子結點個數

大小為 N 的完全二叉樹的葉子結點個數為 N-[N/2]。

令 Sy(N) 表示大小為 N 的完全二叉樹的葉子結點個數,要證該命題,即證 Sy(N)=N-[N/2]。

大小為 2 的完全二叉樹的葉子結點個數 Sy(2)=1,N-[N/2]=2-[2/2]=1,命題成立。另不難知道大小為 0 或 1 的完全二叉樹滿足命題。

假設命題在 N=M 時成立,即大小為 M 的完全二叉樹的葉子結點個數 Sy(N)=M-[M/2],那麼當 N=M+1 時,若:

① M 為偶數(度為 1 的結點個數為 1),那麼大小為 M 的完全二叉樹的最後一個結點沒有兄弟結點,則大小為 M+1 的完全二叉樹的葉子結點個數為大小為 M 的完全二叉樹的葉子結點個數加一,即 Sy(M+1)=Sy(M)+1=M-[M/2]+1,而 M 為偶數,故 [M/2]=[(M+1)/2] 進而 M-[M/2]+1=M+1-[(M+1)/2],故命題在 N=M+1 時成立;

② M 為奇數(度為 1 的結點個數為 0),那麼大小為 M 的完全二叉樹的最後一個結點有兄弟結點,則大小為 M+1 的完全二叉樹的葉子結點個數與大小為 M 的完全二叉樹的葉子結點個數相等,即 Sy(M+1)=Sy(M)=M-[M/2],而 M 為奇數,故 [(M+1)/2]=[M/2]+1 進而 M-[M/2]=M+1-[(M+1)/2],故命題在 N=M+1 時成立。

另:

當 N 為偶數時,N-[N/2]=N-N/2=N/2=[(N+1)/2];

當 N 為奇數時 N-[N/2]=N+1-[(N+1)/2]=N+1-(N+1)/2=(N+1)/2=[(N+1)/2]。

故原命題也可寫成:大小為 N 的完全二叉樹的葉子結點個數為 [(N+1)/2]。


另一種方法:

二叉樹的度指該節點引出的邊數(節點下面的邊),也即節點的子節點樹。那麼二叉樹有 3 種度:

  • n0:度為 0,即為葉子節點數量。
  • n1:度為 1,即為只有左子樹或者右子樹的節點數量,對於完全二叉樹,只可能存在一種情況,節點數為奇數時有一個節點只有一個左子樹,所以 n1 = 0 or 1。
  • n2:度為 2,即有左右節點的節點數量。

由二叉樹的性質有 n0 = n2 + 1。

證明:

  • 由於 n = n0 + n1 + n2,而 n0 = n2 + 1,所以 n = 2n0 + n1 - 1,n0=(n+1-n1)/2
  • 對於完全二叉樹,如果 n 為奇數,說明不存在只有左子節點的節點,n1 = 0, n0 = (n+1)/2;如果 n 為偶數,說明存在 1 個只有左子節點的節點,n1 = 1, n0 = n/2。可以合併為 n0 = [(n+1)/2]。

完全二叉樹的葉子節點數

完全二叉樹葉子節點的個數