力扣题目:#104.二叉树的最大深度
刷题时长:5min
解题方法:递归法
复杂度分析
-
时间:O(n),其中 n 为二叉树节点的个数。每个节点在递归中只被遍历一次。
-
空间:O(H),其中 H 是树的高度。空间复杂度主要取决于递归时栈空间的开销,最坏情况下,树呈现链状,空间复杂度为 O(N)。平均情况下树的高度与节点数的对数正相关,空间复杂度为 O(logN)。
问题总结
无
本题收获
- 完成了相关题目:#559.n叉树的最大深度 (5min)
力扣题目:#111.二叉树的最小深度
刷题时长:20min
解题方法:递归法
复杂度分析
- 时间:O(n),其中 n 为二叉树节点的个数。每个节点在递归中只被遍历一次。
- 空间:O(H),其中 H 是树的高度。空间复杂度主要取决于递归时栈空间的开销,最坏情况下,树呈现链状,空间复杂度为 O(N)。平均情况下树的高度与节点数的对数正相关,空间复杂度为 O(logN)。
问题总结
- 踩坑,把没有没有左孩子的分支算为最短深度
本题收获
- 考虑进一侧孩子为空的情况:右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1
- 求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑
力扣题目:#222.完全二叉树的节点个数
刷题时长:20min
解题方法:递归法
复杂度分析
- 时间:O(log n * log n) ,在求左右子树深度时,每次都是从根节点开始往下走,每个子树的深度都是 O(log(n)) 级别的,所以求深度的时间复杂度为 O(log(n))。然后每一层都要计算一次这个深度,层数也是log(n),那就是相乘的了
- 空间:O(1)
问题总结
- 只能想到普通二叉树的O(n)解法,没能想到满足完全二叉树性质的特殊技巧
本题收获
- 判断满二叉树:左右深度一致
- 若非满二叉树,递归其左子树和右子树,直到找到满二叉树(无左右孩子的叶节点也算是)