首页 > 编程语言 >代码随想录算法训练营第二十三天 | 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

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

时间:2024-06-03 21:44:37浏览次数:29  
标签:right TreeNode 随想录 二叉 搜索 return root left

669.修剪二叉搜索树

题目链接 文章讲解 视频讲解

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if(root == nullptr) return nullptr;
        // 当前值小于左边界时,当前节点的左子树全部小于左边界,所以全部删除,直接处理右子树
        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;
    }
};

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

题目链接 文章讲解 视频讲解

思路:二分法划分区间,将中间节点作为当前节点,左区间挂在左子树,右区间挂在右子树,保证二叉树有序平衡

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

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

题目链接 文章讲解 视频讲解

此题的关键在于遍历顺序,以右中左的顺序遍历并逐渐累加结果即可

class Solution {
public:
    TreeNode* convertBST(TreeNode* root) {
        int count = 0;
        traversal(root, count);
        return root;
    }

    void traversal(TreeNode* root, int& count) {
        if(root == nullptr) return ;
        traversal(root->right, count); // 中序遍历右子树
        count += root->val;  // 累加结果
        root->val = count;
        traversal(root->left, count); // 中序遍历左子树
    }
};

标签:right,TreeNode,随想录,二叉,搜索,return,root,left
From: https://www.cnblogs.com/cscpp/p/18229038

相关文章

  • 搜索策略
    Ch4搜索策略搜索的含义搜索问题一般包括两个重要的问题:搜索什么:通常指目标在哪里搜索:即搜索空间,通常指一系列状态的汇集搜索过程实际上是根据初始条件和扩展规则构造一棵解答树并寻找符合目标状态的节点的过程启发式搜索:依靠经验,利用已有知识,根据问题的实际情况,不断寻找......
  • 代码随想录算法训练营第二十二天 | 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的
    235.二叉搜索树的最近公共祖先题目链接文章讲解视频讲解思路:递归遍历二叉搜索树   如果当前值大于p和q的值,向左遍历   如果当前值小于p和q的值,向右遍历   否则说明当前值介于p和q之间,直接返回当前节点classSolution{public:TreeNode*lowestCommonAnc......
  • 代码随想录算法训练营Day59 | 503.下一个更大元素II、42. 接雨水 | Python | 个人记录
    注:Day58是休息日。本文目录503.下一个更大元素II做题看文章42.接雨水做题看文章以往忽略的知识点小结个人体会503.下一个更大元素II代码随想录:503.下一个更大元素IILeetcode:503.下一个更大元素II做题和之前的739.每日温度一样,只不过可以循环,我这边是多遍历一......
  • 淘宝商品id怎么实现批量自动获取?通过关键字搜索接口来获取批量商品id(淘宝API)
    item_search-按关键字搜索淘宝商品传入商品关键字,通常在商品标题中进行检索,将包含此关键字的商品展示出来,分页展示。公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,i......
  • 101. 对称二叉树
    简单 相关标签相关企业 给你一个二叉树的根节点 root ,检查它是否轴对称。 示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false 提示:树中节点数目在范围 [1,1000] 内-100<=Node.val<=100 进阶:......
  • 代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众
    530.二叉搜索树的最小绝对差题目链接文章讲解视频讲解关键词:二叉搜索树-->中序遍历关于递归的返回值  由于需要遍历整棵二叉树,所以返回值为void,如果不是遍历整棵二叉树,需要在得到结果时立即返回结果,此时返回值才不为空怎样使用两个指针pre和cur使得pre始终指向cur的前......
  • 城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(二)
    我们在之前的文章“城市之旅:使用LLM和Elasticsearch简化地理空间搜索(一)”,在今天的练习中,我将使用本地部署来做那里面的Jupyternotebook。安装Elasticsearch及Kibana如果你还没有安装好自己的Elasticsearch及Kibana,请参考如下的链接来进行安装:如何在Linux,Mac......
  • 代码随想录算法训练营第二十天 | 654.最大二叉树 617.合并二叉树 二叉搜索树
    654.最大二叉树题目链接文章讲解视频讲解classSolution{public:TreeNode*constructMaximumBinaryTree(vector<int>&nums){returninorderTraversal(nums,0,nums.size()-1);}TreeNode*inorderTraversal(vector<int>&nums,intbegi......
  • Part 3.1 深度优先搜索
    深度优先搜索(DFS),即按照深度优先的顺序搜索的算法。深度优先搜索一般使用栈来实现。[USACO1.5]八皇后CheckerChallenge题目描述一个如下的6×6......
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解
    广度优先搜索(Breadth-FirstSearch,简称BFS)是一种用于图或者树的搜索算法,它的特点是按照“广度”进行搜索,即在扩展搜索路线的时候,BFS会先考虑当前节点的所有邻近节点,也就是说,它逐层地进行搜索。文章目录基本原理实现方法应用场景总结基本原理广度优先搜索的基本......