222. 完全二叉树的节点个数
对于这个题目,一开始很容易想到遍历,不管是前、中、后、层序遍历都是可以的遍历完一边后答案就出来了,太简单就不写了。说一下一个进阶的写法
对于每一个棵树,首先就判断它整体是不是完全二叉树
如果是,那就很简单了,直接返回它的2^h即可,(h是高度,这个公式利用了满二叉树的性质)
如果不是,那么必然有一边是满二叉树,另一边不是满二叉树,那么就把这个问题细分为两个子问题再递归计算,这个问题会无限被细分成满二叉树,然后就可以套公式计算了,具体的操作步骤如下
1 | class Solution { |
110.平衡⼆叉树
为什么要后序遍历?
因为要从根节点计算两边子树的高度,相减的结果就是判断返回值的依据
为什么返回-1
因为如果两棵子树的差大于1的话,那么他就不是平衡二叉树了,所以再返回高度就没有意义了,这时要返回一个绝对不可能出现的值标记失败(相当于返回值int承担了两个作用)
1 | class Solution { |
时间复杂度:O(n)
空间复杂度:O(n)
这道题一开始写还没写出来,连暴力法都没想出来,还要强加练习呀
1 | class Solution { |
暴力法
时间复杂度O(nlog(n))
空间复杂度O(n)