LeetCode高频100题刷题记录之——翻转二叉树

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为树的最大深度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值