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

相关推荐
love_muming10 分钟前
二叉树操作全解析:从递归到层序遍历
java·数据结构·算法·二叉树
Darkwanderor16 分钟前
多线程的互斥问题和互斥锁解决互斥问题
linux·c语言·c++
键盘会跳舞18 分钟前
C++:std::pair 源码级深度剖析 —— 关联容器的基石
开发语言·c++·pair·关联容器
(Charon)21 分钟前
【C++】手写线程安全队列:mutex + condition_variable 实现生产者消费者模型
c语言·开发语言·c++
.道阻且长.9 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
·薯条大王9 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
To_OC11 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
白狐_79811 小时前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
Forever Nore14 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法