码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法23|669,108,538


    669. 修剪二叉搜索树

    1. class Solution:
    2. def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
    3. #终止条件
    4. if root is None:
    5. return None
    6. #判断root的值大于最高值,寻找符合条件的节点,不可以返回root.left,因为直接断掉后面符合条件的数值
    7. if root.val > high:
    8. left = self.trimBST(root.left,low,high)
    9. return left
    10. #判断root的值小于最高值,寻找符合条件的节点
    11. if root.val < low:
    12. right = self.trimBST(root.right,low,high)
    13. return right
    14. root.left = self.trimBST(root.left,low,high)
    15. root.right = self.trimBST(root.right,low,high)
    16. return root

    题目链接/文章讲解: 代码随想录

    视频讲解: 你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili

    二刷(未ac)

    1. var trimBST = function(root, low, high) {
    2. if(root === null){
    3. return null;
    4. }
    5. if(root.val < low){
    6. let right = trimBST(root.right,low,high);
    7. return right;
    8. }
    9. if(root.val > high){
    10. let left = trimBST(root.left,low,high);
    11. return left;
    12. }
    13. root.left =trimBST(root.left,low,high);
    14. root.right = trimBST(root.right,low,high);
    15. return root;
    16. };

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

    1. class Solution:
    2. def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
    3. def traversal(nums,left,right):
    4. if left >right:return None
    5. mid = left+(right-left)//2
    6. root = TreeNode(nums[mid])
    7. root.left = traversal(nums,left,mid-1)
    8. root.right = traversal(nums,mid+1,right)
    9. return root
    10. return traversal(nums,0,len(nums)-1)

    因为需要构造平衡二叉树,所以得分为左区间、右区间和中间节点

    代码随想录

    视频讲解:构造平衡二叉搜索树!| LeetCode:108.将有序数组转换为二叉搜索树_哔哩哔哩_bilibili

    二刷:这道题比较简单,但是我还是没有ac

    1. var sortedArrayToBST = function (nums) {
    2. // 找中间
    3. // 分两两边
    4. const find = function (nums, left, right) {
    5. if(left> right){return null}
    6. let mid = Math.floor(left+(right - left)/2)
    7. let root = new TreeNode(nums[mid])
    8. root.left = find(nums,left,mid-1)
    9. root.right = find(nums,mid+1,right)
    10. return root
    11. }
    12. return find(nums,0,nums.length-1)
    13. };

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

    1. class Solution:
    2. def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
    3. pre = 0
    4. def traversal(cur):
    5. nonlocal pre
    6. #终止条件
    7. if cur is None:
    8. return
    9. #右
    10. traversal(cur.right)
    11. #中
    12. cur.val += pre
    13. #注意,这里是数值的变化
    14. pre = cur.val
    15. #左
    16. traversal(cur.left)
    17. traversal(root)
    18. return root

    使用双指针的方法,然后从右往左遍历,直到cur为空,再返回相加值

    代码随想录

    视频讲解:普大喜奔!二叉树章节已全部更完啦!| LeetCode:538.把二叉搜索树转换为累加树_哔哩哔哩_bilibili

    二刷:未ac

    递归法和迭代法

    1. var convertBST = function(root) {
    2. // 计算顺序右边中间左边
    3. let pre = null
    4. let cur = root
    5. const traversal = function(cur){
    6. if(cur === null){return }
    7. traversal(cur.right)
    8. if(pre !== null){
    9. cur.val += pre.val
    10. }
    11. pre = cur
    12. traversal(cur.left)
    13. }
    14. traversal(root)
    15. return root
    16. };
    1. var convertBST = function(root) {
    2. let stack = [];
    3. let pre = 0
    4. let cur = root
    5. while(cur !== null || stack.length > 0){
    6. if(cur !== null){
    7. stack.push(cur)
    8. cur = cur.right
    9. }else{
    10. cur = stack.pop()
    11. cur.val += pre
    12. pre = cur.val
    13. cur = cur.left
    14. }
    15. }
    16. return root;
    17. };

    总结篇

    代码随想录

  • 相关阅读:
    iOS视频捕获实践篇
    HMI-Board上手指南
    redis-sentinel部署手册及Java代码实现
    技术管理实战之全貌
    Mysql其他日志
    基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十二:通用详情组件封装实现
    基于ssm的蛋糕预定网站
    ElasticSearch8 8.3.0 安装 + kibana8.3.0 linux系统安装详细流程
    [ruby on rails]rails6.0升级6.1
    Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式
  • 原文地址:https://blog.csdn.net/weixin_42173016/article/details/127944612
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号