• LeetCode 热题 HOT 100 第五十八天 226. 翻转二叉树 简单题 用python3求解


    题目地址

    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

    示例 1:
    在这里插入图片描述
    输入:root = [4,2,7,1,3,6,9]
    输出:[4,7,2,9,6,3,1]

    示例 2:
    在这里插入图片描述
    输入:root = [2,1,3]
    输出:[2,3,1]

    示例 3:
    输入:root = []
    输出:[]

    提示:
    树中节点数目范围在 [0, 100] 内
    -100 <= Node.val <= 100

    在这里插入图片描述
    在这里插入图片描述
    解法:递归
    仔细看下题目的输入输出,输出的左右子树的位置跟输入正好是相反的,于是我们可以递归的交换左右子树来完成这道题。

    演示过程:
    首先,把2和7这两棵子树整体交换
    在这里插入图片描述
    在这里插入图片描述
    其次,把7的左右子树(6和9)交换
    在这里插入图片描述
    把2的左右子树(1和3)交换
    在这里插入图片描述

    其实就是交换一下左右节点,然后再递归的交换左节点,右节点

    根据演示过程我们可以总结出递归的两个条件如下:

    • 终止条件:当前节点为 null 时返回
    • 交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点

    时间复杂度:每个元素都必须访问一次,所以是O(n)
    空间复杂度:最坏的情况下,需要存放O(h)个函数调用(h是树的高度),所以是O(h)

    代码实现:

    class Solution(object):
    	def invertTree(self, root):
    		"""
    		:type root: TreeNode
    		:rtype: TreeNode
    		"""
    		# 递归函数的终止条件,节点为空时返回
    		if not root:
    			return None
    		# 将当前节点的左右子树交换
    		root.left,root.right = root.right,root.left
    		# 递归交换当前节点的 左子树和右子树
    		self.invertTree(root.left)
    		self.invertTree(root.right)
    		# 函数返回时就表示当前这个节点,以及它的左右子树
    		# 都已经交换完了		
    		return root
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    这500万你领了吗?成都市生物医药产业发展的专项政策申报奖励
    modbus协议教程
    获取购物车的商品列表
    数据库管理系统(DBMS)分类
    verilog REG 寄存器、向量、整数、实数、时间寄存器
    在RVIZ中显示深度数据
    C++ 火车调度
    技术与安全的交织
    分析脚手架、ref、props
    除氨氮树脂T-42H性能测试
  • 原文地址:https://blog.csdn.net/weixin_40634691/article/details/124974831