当前位置: 首页 > news >正文

湛江建设局网站网站编程电子书

湛江建设局网站,网站编程电子书,aspnet东莞网站建设多少钱,oa办公系统软件哪家好LeetCode 热题100 | 226. 翻转二叉树 大家好#xff0c;今天我们来解决一道经典的算法题——翻转二叉树。这道题在 LeetCode 上被标记为简单难度#xff0c;要求我们翻转一棵二叉树#xff0c;并返回其根节点。下面我将详细讲解解题思路#xff0c;并附上 Python 代码实现…LeetCode 热题100 | 226. 翻转二叉树 大家好今天我们来解决一道经典的算法题——翻转二叉树。这道题在 LeetCode 上被标记为简单难度要求我们翻转一棵二叉树并返回其根节点。下面我将详细讲解解题思路并附上 Python 代码实现。 题目描述 给定一棵二叉树的根节点 root翻转这棵二叉树并返回其根节点。 示例 输入root [4,2,7,1,3,6,9] 输出[4,7,2,9,6,3,1]解题思路 翻转二叉树的核心思想是交换每个节点的左右子树。我们可以通过递归或迭代的方式来实现。 核心思想 递归法 递归地翻转左子树和右子树。交换当前节点的左右子树。 迭代法BFS 使用队列进行层次遍历逐层交换每个节点的左右子树。 代码实现 方法 1递归法 class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right rightdef invertTree(root)::type root: TreeNode:rtype: TreeNodeif not root:return None# 递归翻转左右子树left invertTree(root.left)right invertTree(root.right)# 交换当前节点的左右子树root.left rightroot.right leftreturn root方法 2迭代法BFS from collections import dequedef invertTree(root)::type root: TreeNode:rtype: TreeNodeif not root:return Nonequeue deque([root]) # 使用队列存储节点while queue:node queue.popleft() # 弹出当前节点# 交换当前节点的左右子树node.left, node.right node.right, node.left# 将左右子节点加入队列if node.left:queue.append(node.left)if node.right:queue.append(node.right)return root代码解析 递归法 递归终止条件 如果当前节点为空返回 None。 递归翻转左右子树 递归地翻转左子树和右子树。 交换当前节点的左右子树 将当前节点的左子树指向翻转后的右子树右子树指向翻转后的左子树。 返回根节点 返回翻转后的二叉树的根节点。 迭代法BFS 初始化 如果根节点为空直接返回 None。使用队列存储节点初始时将根节点加入队列。 遍历队列 弹出当前节点交换其左右子树。将当前节点的左右子节点加入队列。 返回根节点 遍历结束后返回翻转后的二叉树的根节点。 复杂度分析 时间复杂度O(n)其中 n 是二叉树的节点数。每个节点被访问一次。空间复杂度 递归法O(h)其中 h 是二叉树的高度递归调用栈的深度为树的高度。迭代法O(n)队列的最大空间为树的宽度。 示例运行 示例 1 # 创建二叉树 [4,2,7,1,3,6,9] root TreeNode(4) root.left TreeNode(2) root.right TreeNode(7) root.left.left TreeNode(1) root.left.right TreeNode(3) root.right.left TreeNode(6) root.right.right TreeNode(9)# 翻转二叉树 inverted_root invertTree(root)# 层序遍历输出结果 def levelOrder(root):if not root:return []result []queue deque([root])while queue:level_size len(queue)level_nodes []for _ in range(level_size):node queue.popleft()level_nodes.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)result.append(level_nodes)return resultprint(levelOrder(inverted_root)) # 输出: [[4], [7, 2], [9, 6, 3, 1]]示例 2 # 创建二叉树 [2,1,3] root TreeNode(2) root.left TreeNode(1) root.right TreeNode(3)# 翻转二叉树 inverted_root invertTree(root)# 层序遍历输出结果 print(levelOrder(inverted_root)) # 输出: [[2], [3, 1]]示例 3 # 创建空二叉树 [] root None# 翻转二叉树 inverted_root invertTree(root)# 层序遍历输出结果 print(levelOrder(inverted_root)) # 输出: []总结 通过递归或迭代的方式我们可以高效地翻转二叉树。递归法代码简洁但可能受递归深度限制迭代法使用队列进行层次遍历适合处理较大的树。希望这篇题解对你有帮助如果还有其他问题欢迎继续提问 关注我获取更多算法题解和编程技巧
http://www.w-s-a.com/news/878637/

相关文章:

  • 网站建设核心优势seo求职信息
  • 网站手册自己在百度上可以做网站吗
  • 影楼网站源码建行业网站的必要性
  • 深圳app网站设计软件开发公司税收优惠政策
  • 北京市中关村有哪家可以做网站维护客户管理系统 wordpress
  • 做网站拉客户有效吗全景图网页制作工具
  • 网站建设公司行业建设网站需要提供什么资料
  • 别人的做网站网页打不开图片
  • 北京专业网站设计推荐怎么建立网站网址
  • 上海网站建设开发公司哪家好网站数据搬家
  • 杭州建站平台哪里有免费的网站推广软件
  • 深圳极速网站建设服务什么网站可以做产品入驻
  • 淄博易宝网站建设app推广拉新公司
  • 营销型外贸网站建设软件备案域名出租
  • 网站域名禁止续费m99ww094cn 苍井空做的网站
  • 上海建设工程网站大同网站建设熊掌号
  • 设计类书籍网站江苏网站建设简介模板
  • 手机企业网站推广c 手机app开发
  • 网站建设需要多少天凡客建设网站稳定吗
  • 房天下网站建设女生说wap是什么意思
  • 网站开发安全机制北京做网站多少钱合理
  • 扁平化 公司网站建设大型视频网站需要的资金量
  • 免费建各种网站淄博网站建设yx718
  • 凡科网建站入门教程运城市网站建设
  • 黄浦区未成年人思想道德建设网站oa系统是什么
  • 微信里的网站怎么做电子商务网站开发平台
  • 易企秀网站怎么做轮播图网站建设张世勇
  • 网站备案幕布尺寸建立网页的几个步骤
  • pc网站页面找出网站所有死链接
  • 专业做seo的网站网站内连接