226. 翻转二叉树
题目描述
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
解题思路
翻转的效果为:二叉树每个节点的左右子节点进行交换。
实现上可分为前序遍历和后序遍历两种:
前序遍历是先交换左右节点,再对左右子节点进行递归。
后续遍历是一直递归到叶子节点,然后再从下往上交换。
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
# 二叉树的后序遍历
# 当前节点为空是返回,否则左右子树交换位置
if not root:
return None
left = self.invertTree(root.left)
right = self.invertTree(root.right)
root.left, root.right = right, left
return root
def invertTree1(self, root: TreeNode) -> TreeNode:
# 二叉树的前序遍历
# 当前节点为空是返回,否则左右子树交换位置
if not root:
return None
# tmp = root.left
# root.left = root.right
# root.right = tmp
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root # 第一次错误:未写此处
来源:力扣(LeetCode)
参考:labuladong