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

代码随想录|Day20|二叉树09|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树

思路:利用二叉搜索树的性质,对于每个节点,判断其是否在区间内:

  • 如果节点值 < low,则此节点和其左子树都不在范围内
  • 如果节点值 > high,则此节点和其右子树都不在范围内
  • 如果 low < 节点值 < high,则保留此节点,但需要递归修建其左右子树
class Solution:def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:if not root:return None# 如果节点小于low,返回右子树修剪的结果if root.val < low:return self.trimBST(root.right, low, high)# 如果节点大于high,返回左子树修剪的结果elif root.val > high:return self.trimBST(root.left, low, high)# 如果节点在区间内,递归修建左右子树else:root.left = self.trimBST(root.left, low, high)root.right = self.trimBST(root.right, low, high)return root

108.将有序数组转换为二叉搜索树

 思路:我们知道,按照中序遍历一个二叉搜索树将获得一个递增数组。因此我们可以将数组二分,中间元素所谓根节点,左边元素作为左子树,右边元素作为右子树,递归下去可以构成平衡二叉搜索树。

class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:def helper(left, right):if left > right:return Nonemid = (left + right) // 2root = TreeNode(nums[mid])root.left = helper(left, mid - 1)root.right = helper(mid + 1, right)return rootreturn helper(0, len(nums)-1)

538.把二叉搜索树转换为累加树

什么是累加树?

指在二叉搜索树(BST)的基础上进行转换得到的一种特殊形式的树。在累加树中,每个节点的值被替换为原始二叉搜索树中所有大于该节点值的节点值之和加上该节点自身的值。

思路:我们从最大值开始累加,因此遍历顺序是元素从大到小。我们可以使用反向中序遍历来实现:右中左。

class Solution:def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:self.sum = 0def traverse(node):if not node:return# 反向中序遍历:右 -> 根 -> 左traverse(node.right)self.sum += node.valnode.val = self.sumtraverse(node.left)traverse(root)return root
http://www.lryc.cn/news/318515.html

相关文章:

  • 开源的java 代码分析库介绍
  • 基于udp协议的网络通信(windows客户端版+简易聊天室版),重定向到终端
  • Qt+FFmpeg+opengl从零制作视频播放器-7.OpenGL播放视频
  • 用两个栈实现简单的四则运算
  • <个人笔记>数论
  • CMS垃圾收集
  • Incorrect DECIMAL value: ‘0‘ for column ‘‘ at row -1
  • Vue3组件通信的方式
  • 双场板功率型GaN HEMT中用于精确开关行为的电容建模
  • UE4_AI_行为树_行为树快速入门指南
  • c++ 面试100个题目中的编程题目
  • C++初阶:类与对象(尾篇)
  • Spring状态机简单实现
  • WebServer -- 面试题(下)
  • 企业微信如何接入第三方应用?
  • JAVA后端编码的主键字段存储为什么倾向于使用雪花算法
  • Rust 深度学习库 Burn
  • C语言-存储期2.0
  • 计算机网络面经八股-HTTP请求报文和响应报文的格式?
  • Ubuntu 18.04安装最新版Visual Studio Code(VS Code)报依赖库版本过低错误
  • Android NDK入门:在应用中加入C和C++的力量
  • 2024年华为OD机试真题-田忌赛马-Java-OD统一考试(C卷)
  • C++ 网络编程学习五
  • 案例分析篇05:数据库设计相关28个考点(9~16)(2024年软考高级系统架构设计师冲刺知识点总结系列文章)
  • pip 和conda 更换镜像源介绍
  • Git概述及安装步骤
  • 北京保险服务中心携手镜舟科技,助推新能源车险市场规范化
  • 给女朋友的浪漫微信消息推送超详细版
  • Android开发 Activity启动模式、ViewModel与LiveData,及Kotlin Coroutines
  • MQL语言实现抽象工厂模式