1. 题解
很明显,O(n)是肯定过不了的,我们所用的方法如下
- 往左遍历得到高度h1, 往右遍历得到高度h2
- 如果 h1 == h2, 说明是满2叉树, 直接计算
- 如果 h1 != h2, 则 递归为cal(root->left) + cal(root->right) + 1
2. 复杂服分析(重点)
首先,因为每次递归就会把问题对象的高度减1,所以最多把这个问题递归O(h)次, 而每次计算又最多需要O(h)来计算是否是满二叉树。所以本解法的复杂度是O(h^2).
很明显,O(n)是肯定过不了的,我们所用的方法如下
首先,因为每次递归就会把问题对象的高度减1,所以最多把这个问题递归O(h)次, 而每次计算又最多需要O(h)来计算是否是满二叉树。所以本解法的复杂度是O(h^2).