思路:反转左孩子和右孩子,再反转左孩子的左右孩子和反转右孩子的左右孩子,即先翻转左右孩子,再翻转左子树和右子树(中序遍历容易翻转两次,一般不用)
递归:先确定终止条件,再确定单层递归逻辑
伪代码:
前序遍历:
如果根不存在:
返回None
根的左孩子,右孩子=根的右孩子,左孩子//中左右
翻转左子树
翻转右子树
返回根
后序遍历:
如果根不存在:
返回None
翻转左子树
翻转右子树
根的左孩子,右孩子=根的右孩子,左孩子//左右中
返回根
代码:
前序遍历
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return None
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
后序遍历
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return None
self.invertTree(root.left)
self.invertTree(root.right)
root.left, root.right = root.right, root.left
return root