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

相关推荐
战族狼魂28 分钟前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一34 分钟前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH40 分钟前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
脱胎换骨-军哥1 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
ChaoZiLL2 小时前
我的数据结构4-栈和队列
数据结构
香辣牛肉饭2 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
miller-tsunami2 小时前
顺序表相关知识点
数据结构·顺序表
.徐十三.3 小时前
一篇文章看到最短路径——Dijkstra算法
算法
胖大和尚4 小时前
C++ 多线程编程的实现方式
c++·thread