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

代码随想录算法训练营第23期day22|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录

一、(leetcode 669)修剪二叉搜索树

二、(leetcode 108)将有序数组转换为二叉搜索树

三、(leetcode 538)把二叉搜索树转换为累加树


一、(leetcode 669)修剪二叉搜索树

力扣题目链接

状态:查看思路后AC

不能简单地对节点进行是否在区间内的判断就返回空节点。这样会遗漏掉左孩子右子树和右孩子左子树中符合条件的节点。至于如何将相关节点放到对应的位置,要下层节点返回,上层节点接收。

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(root == nullptr) return nullptr;if(root->val < low){TreeNode* right = trimBST(root->right, low, high);return right;}if(root->val > high){TreeNode* left = trimBST(root->left, low, high);return left;}root->left = trimBST(root->left, low, high);root->right = trimBST(root->right, low, high);return root;}
};

二、(leetcode 108)将有序数组转换为二叉搜索树

力扣题目链接

状态:Debug后AC

注意mid的写法,为了防止超出int界限,最好使用left + (right-left)/2的形式来写,这里的除2也可以写成右移一位的形式:left + (right-left>>1),注意移位运算符的优先级在加减之后

class Solution {
public:TreeNode* traversal(vector<int>& nums, int left, int right){if(left > right) return nullptr;int mid = left + (right - left >> 1);TreeNode* root = new TreeNode(nums[mid]);root->left = traversal(nums, left, mid-1);root->right = traversal(nums, mid+1, right);return root;}TreeNode* sortedArrayToBST(vector<int>& nums) {TreeNode* root = traversal(nums, 0, nums.size()-1);return root;}
};

三、(leetcode 538)把二叉搜索树转换为累加树

力扣题目链接

状态:没有思路

这道题的关键在于发现“换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13]。”在BST中实现这个过程,可以用反中序遍历(右中左)的方法来处理

class Solution {
public:int pre; // recordvoid traversal(TreeNode* cur){// right->mid->leftif(cur == nullptr) return;traversal(cur->right);cur->val += pre;pre = cur->val;traversal(cur->left);}TreeNode* convertBST(TreeNode* root) {pre = 0;traversal(root);return root;}
};
http://www.lryc.cn/news/195190.html

相关文章:

  • IDEA中创建Web工程流程
  • 【论文阅读】基于卷积神经的端到端无监督变形图像配准
  • 【Rust】包和模块,文档注释,Rust格式化输出
  • leetcode221.最大正方形
  • 低代码技术这么香,如何把它的开发特点发挥到极致?
  • drawio简介以及下载安装
  • Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)
  • elasticsearch (六)filebeat 安装学习
  • 算法通关村第一关|青铜|链表笔记
  • 【记录】使用Python读取Tiff图像的几种方法
  • JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA
  • Linux部署kubeedge 1.4
  • 第一章习题
  • nvm、node、npm解决问题过程记录
  • Linux- DWARF调试文件格式
  • 软件工程第六周
  • node+pm2安装部署
  • 大数据学习(11)-hive on mapreduce详解
  • MyBatis基础之自动映射、映射类型、文件注解双配置
  • 8、docker 安装 nginx
  • 关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值
  • 手机路径、Windows路径知识及delphiXE跨设备APP自动下载和升级
  • GitLab 502问题解决方案
  • selenium打开火狐浏览器
  • 多标签分类论文笔记 | ML-Decoder: Scalable and Versatile Classification Head
  • 修改http_charfinder.py使能在python311环境中运行
  • 蓝桥杯(跳跃 C++)
  • 08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?
  • JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式
  • OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!