【leetcode】226. 翻转二叉树
翻转二叉树
- 题目
- 题解
- 解释
题目
226. 翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
题解
思路:递归
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def invertTree(self, root):""":type root: Optional[TreeNode]:rtype: Optional[TreeNode]"""if not root:returnleft = self.invertTree(root.left)right = self.invertTree(root.right)root.left, root.right = right, leftreturn root
解释
假设有一个二叉树,如下所示:
1/ \2 3/ \
4 5
步骤 1: 反转根节点
从根节点 1 开始,我们需要交换 1 的左子树和右子树。
左子树是 2,右子树是 3,所以交换后变成:
1/ \3 2/ \4 5
步骤 2: 递归反转左右子树
接下来,我们递归地对左右子树进行反转。
先对右子树(节点 3)递归反转。节点 3 没有子树,所以直接返回,结果是 3。
然后对左子树(节点 2)递归反转。节点 2 的左子树是 4,右子树是 5,交换后:
2/ \5 4
步骤 3: 完整的反转结果
最后,返回到根节点,继续处理已经反转的子树。最终反转后的二叉树是:
1/ \3 2/ \5 4