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

669. 修剪二叉搜索树

思路:这道题目主要需要考虑当找到一个值不在这个区间时,他的子树如何继续处理,比如如果小于区间最小值,那么其右子树还是有可能有符合的值,所以需要进行进一步递归处理,大于区间最大值,则其左子树也有可能在区间内,最后分别返回左右子树,所有这些情况考虑之后,最后返回处理好的树就可以。

我的代码:

cpp 复制代码
class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if(root==NULL) return NULL;
        if(root->val<low) return trimBST(root->right,low,high);
        if(root->val>high) return trimBST(root->left,low,high);
        root->left=trimBST(root->left,low,high);
        root->right=trimBST(root->right,low,high);
        return root;
    }
};

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

思路:本题考构建二叉树,用中序遍历构建二叉树,先找到中间节点,在从其左右分别构建左右子树。左右都构建完之后再返回根节点就可以。

我的代码:

cpp 复制代码
class Solution {
private:
    TreeNode* tranversal(vector<int>& nums,int left,int right) {
        if(left>right) return NULL;
        int mid=(left+right)/2;
        TreeNode* root=new TreeNode(nums[mid]);
        root->left=tranversal(nums,left,mid-1);
        root->right=tranversal(nums,mid+1,right);
        return root;
    }
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
    return tranversal(nums,0,nums.size()-1);
    }
};

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

思路:这道题刚开始看题目都没看懂是什么意思,后面理解题目之后其实就很好做了,就是从右到左来遍历数组累加就可以,用到一个pre节点的值,每轮更新就可以。

我的代码:

cpp 复制代码
class Solution {
private:
    int pre;
    void tranversal(TreeNode* root) {
      if(root==NULL) return;
      tranversal(root->right);
      root->val+=pre;
      pre=root->val;
      tranversal(root->left);  
    }
public:
    TreeNode* convertBST(TreeNode* root) {
        pre=0;
        tranversal(root);
        return root;
    }
};

今日总结

二叉树章节今天就结束了,大总结可以参考:二叉树总结篇|代码随想录

我也要回广州了,正月初六顺顺顺,第一遍过二叉树其实自己现在能手撕出来的不多,还是需要多练练自己从看到题目,独立思考到解出代码的能力,在现在这个瞬息万变的时代,虽然现在我写的这些编程题用ai都能秒出,很多工作ai也可以有很大帮助,但作为计算机学生,只能努力提升个人能力,理解每种算法的细节,根本原理,以不变应万变。昨天还刷到xhs里面有人说以后大厂面试不会再考leecode题目了......哎,继续加油。

相关推荐
C^h5 小时前
c++ string
开发语言·c++
raindayinrain5 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的6 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao6 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
小徐不徐说7 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的7 小时前
C++第一节课
开发语言·c++
UIU1147 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi7 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
TMedical8 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗