前一段参加招聘笔试,遇到了这道题,当时连完全二叉树的定义都不太记得了,虽然我答对了但是感觉费了好长时间,心想作为程序员这种题应该编程解决,不要人去算,这也是我最近的领悟,程序就是用来解决问题的,所以我又看了一下数据结构二叉树那一章,推导了一下,发现其实挺简单的。
我们设度数为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时;