代码随想录第二十六天|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题目了......哎,继续加油。

相关推荐
91刘仁德6 分钟前
C++ 继承和多态 设计模式
c语言·c++·笔记
雨落在了我的手上8 分钟前
Java数据结构(十四):Map和Set
数据结构
码行山野赴时序归途12 分钟前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
库玛西1 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
别动我齐刘海1 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11331 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+1111 小时前
算法 --滑动窗口
c++·算法·leetcode
stolentime1 小时前
(有原题)CSP-S2026第一轮试题(附答案解析、markdown源码)
c++·csp
m0_734571761 小时前
深入理解C++ RAII
开发语言·c++
reikocao2 小时前
大场景下 Hessian 特征值放大与退化检测
算法