二叉樹的幾個性質

在計算機科學中,二叉樹(Binary tree)是每個結點最多隻有兩個子結點(即不存在分支度大於 2 的結點)的樹結構。這兩個子結點通常被稱作“左子結點”和“右子結點”。

命題 \(A\):二叉樹的第 \(n\) 層至多擁有 \(2^{n}\) 個結點(定義根結點所在層數 \(n_0=0\))。

\(C(n)\) 表示二叉樹第 \(n\) 層擁有的結點數,則要證命題 \(A\),即證 \(\forall n\in Z^+_0\)\(C(n)\leq2^{n}\) 總成立。

\(n=0\) 時,\(C(0)\leq2^{0}=1\),命題成立。

假設 \(n=m\) 時命題 \(A\) 成立,即 \(\exists m\in Z^+_0\)\(s.t.\ C(m)\leq2^{m}\),則當 \(n=m+1\) 時:

由定義“二叉樹的每個結點最多隻有兩個子結點”可知,第 \(m+1\) 層的結點個數最多爲 \(2·C(m)\),即 \(C(m+1)\leq2·C(m)\)

\(C(m)\leq2^{m}\),故 \(C(m+1)\leq2·C(m)\leq2·2^{m}=2^{m+1}\),即命題 \(A\) 在第 \(m+1\) 層成立。

由數學歸納法, \(\forall n\in Z^+_0\),命題 \(A\) 總成立。

命題 \(B\):深度爲 \(k\) 的二叉樹最大爲 \(2^{k+1}-1\)(定義二叉樹的大小爲二叉樹中結點的總數、根結點所在深度 \(k_0=0\))。

\(S(k)\) 表示深度爲 \(k\) 的二叉樹的結點總數。

由命題 \(A\),二叉樹的第 \(n\) 層至多擁有 \(2^{n}\) 個結點,故 \(\\S(k)=C(0)+C(1)+\cdots+C(k)\leq2^{0}+2^{1}+\cdots+2^{k}=1×(1-2^{k+1})/(1-2)=2^{k+1}-1\)

命題 \(C\):深度爲 \(k\) 的滿二叉樹(完美二叉樹)的大小(結點總數)爲 \(2^{k+1}-1\)

對於深度爲 \(k\) 的滿二叉樹,\(C(i)=2^{i}\) 總成立(\(i=\{0,1,2,3,\cdots,k-1,k\}\)),故滿二叉樹的結點總數 \(\\S(k)=2^{0}+2^{1}+\cdots+2^{k}=1×(1-2^{k+1})/(1-2)=2^{k+1}-1\)[1]

命題 \(D\):深度爲 \(k\) 的完全二叉樹的結點個數大於 \(2^k-1\),小於等於 \(2^{k+1}-1\)

完全二叉樹從根結點到倒數第二層滿足完美二叉樹,最後一層可以不完全填充。

由命題 \(C\),對於深度爲 \(k\) 的完全二叉樹,其從根結點到倒數第二層部分的節點總數爲 \(2^k-1\),最後一層填滿的情況下二叉樹的結點總數爲 \(2^{k+1}-1\),故完全二叉樹的結點個數大於 \(2^k-1\),小於等於 \(2^{k+1}-1\)

命題 \(E\):結點個數爲 \(S\) 的完全二叉樹的深度(高度)爲 \([lgS]\)

假設節點總數爲 \(S\) 的完全二叉樹的高度爲 \(h\),由完全二叉樹的定義,對於高度爲 \(h\) 的完全二叉樹,其節點總數小於等於高爲 \(h\) 的滿二叉樹的節點總數 \(S_p(h)\),大於等於高爲 \(h-1\) 的滿二叉樹的節點總數 \(S_p(h-1)\)\(1\),即

\[1+ S_p(h-1) \leq S \leq S_p(h) \]

由命題 \(C\)\(S_p(h-1)=2^{h}-1\)\(S_p(h)=2^{h+1}-1\),故

\[1+ 2^{h}-1 \leq S \leq 2^{h+1}-1\\ 2^{h} \leq S \leq 2^{h+1}-1 \]

\[2^{h} \leq S < 2^{h+1} \]

取對數有

\[h \leq \log S < h+1 \]

解得

\[h = \lfloor\log S\rfloor \]

命題 \(F\):從左到右從上到下構造的大小爲 \(N\) 的完全二叉樹的葉子結點個數爲 \(N-[N/2]\)

\(S_y(N)\) 表示大小爲 \(N\) 的完全二叉樹的葉子結點個數,要證命題 \(F\),即證 \(S_y(N)=N-[N/2]\)

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

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

\(M\) 爲偶數,那麼大小爲 \(M\) 的完全二叉樹的最後一個結點沒有兄弟結點,則大小爲 \(M+1\) 的完全二叉樹的葉子結點個數爲大小爲 \(M\) 的完全二叉樹的葉子結點個數加一,即 \(S_y(M+1)=S_y(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\) 爲奇數,那麼大小爲 \(M\) 的完全二叉樹的最後一個結點有兄弟結點,則大小爲 \(M+1\) 的完全二叉樹的葉子結點個數與大小爲 \(M\) 的完全二叉樹的葉子結點個數相等,即 \(S_y(M+1)=S_y(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]\)

data structures - What is the depth of a complete binary tree with \(N\) nodes? - Computer Science Stack Exchange


  1. 類似也不難得到滿多叉樹的大小,比如高度爲 \(k\) 的滿三叉樹的大小 \(S_t(k)=3^{0}+3^{1}+\cdots+3^{k}=(3^{k+1}-1)/2\) ↩︎

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