1 问题描述
给定一棵二叉树,将其翻转。
2 代码实现
如果先做了对称二叉树这题,那么翻转二叉树的难度就非常小了,其实这题的目的就是让你求这棵二叉树的镜像对称。
因此,你可以考虑从头构建一棵二叉树,依次遍历原始树的所有结点并赋值,也可以考虑在原始树上进行操作,这里只讲如何在原始树上进行操作的方法。
2.1 递归实现
对于一棵二叉树的镜像对称,其左子树等于右子树的镜像对称;右子树等于左子树的镜像对称,不论这棵子树位于那一层,都有这个关系,因此,显然可以考虑用递归来解决这个问题,将每一棵子树的左右结点进行对调就行了,非常容易实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if root is None:
return root
else:
left_node = root.left # 需要拷贝地址,否则后面翻转后会发生改变
right_node = root.right
root.left = self.invertTree(right_node)
root.right = self.invertTree(left_node)
return root
时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( h ) O(h) O(h), h h h为树的最大深度。