題目:已知一個完全二叉樹的結點數爲770,問完全二叉樹的葉子結點數爲多少?

前一段參加招聘筆試,遇到了這道題,當時連完全二叉樹的定義都不太記得了,雖然我答對了但是感覺費了好長時間,心想作爲程序員這種題應該編程解決,不要人去算,這也是我最近的領悟,程序就是用來解決問題的,所以我又看了一下數據結構二叉樹那一章,推導了一下,發現其實挺簡單的。

我們設度數爲0,1,2的結點分別爲n0, n1, n2, 總的結點數爲 n。則有:

n = n0 + n1 + n2; 

另,根據二叉樹的性質有:

n0 = n2 + 1;

由上面的兩個式子,可以推導出:

n0 = (n - n1 + 1) / 2;

再因爲完全二叉樹的性質可以得出:

n1 = 0 或 1;

由此可得出,

n0 = (n + 1) / 2;     當n1 = 0時;

n0 = n / 2;   當n1 = 1時;

因爲n0 只能爲整數,所以上面兩種可能結果,誰是整數,誰就是結果。


我寫了個ios程序,圖形化計算葉子結點數,運行結果如下:

這個並沒有加入排除不合理的數據的功能。


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