- LeetCode 226.翻转二叉树
- LeetCode 27.移除元素
- LeetCode 104.二叉树的最大深度
- LeetCode 111.二叉树的最小深度
前言
二叉树(2)
LeetCode 226.翻转二叉树
1 主要思想
v1
二叉树里的基本操作对象就是各子树,矛盾就在于尽管逻辑上“提取一兜子树”十分自然,但落实在代码上更为复杂,初步考虑要用到栈结构。解决这一问题,对二叉树的维护与操作就很清晰了。
v2
分为递归和非递归两种调用方法,递归又又前中后序三种,这里前序和后序都可以,唯独中序比较绕;非递归采用层序遍历方法,通常使用队列实现(v1中提到的栈通常用于模拟递归)。
2 Debug过程
这里出现的主要错误的没有弄清Python中函数的作用域,错误代码如下:
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
def flip(head):
if head == None: return head
head.left, head.rihgt = head.right, head.left
print(head.val) # 用于调试,head
flip(root)
flip(root.left)
flip(root.right)
return root
LeetCode 101. 对称二叉树
主要思想
利用后序遍历,分别对左右子树进行“左右中”遍历和“右左中”遍历方式。
Debug过程
处理递归“弹出选项”时候要注意考虑左右节点为空的情况(最终的递归题解采用了4种方式进行讨论),因为当其中一个节点为空时,二者也不相等,但是无法分别取val值。
LeetCode 104.二叉树的最大深度
主要思想
求解最大深度其实就相当于求解二叉树的高度,是一种“自底向上”遍历的逻辑,适用于后序遍历(左右中、右左中均可)。
LeetCode 111.二叉树的最小深度
主要思想
- 抓住“后序遍历是一层一层往上返回参数”这个概念
- 抓住最大深度和最小深度不同之处