前一段參加招聘筆試,遇到了這道題,當時連完全二叉樹的定義都不太記得了,雖然我答對了但是感覺費了好長時間,心想作爲程序員這種題應該編程解決,不要人去算,這也是我最近的領悟,程序就是用來解決問題的,所以我又看了一下數據結構二叉樹那一章,推導了一下,發現其實挺簡單的。
我們設度數爲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程序,圖形化計算葉子結點數,運行結果如下:
這個並沒有加入排除不合理的數據的功能。