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

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

时间:2024-02-20 18:34:58浏览次数:24  
标签:right TreeNode 随想录 二叉 搜索 root left

669.修剪二叉搜索树 

题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode)

思路:本题原来想沿用上一次最后一道题的思路,用删除二叉搜索树特定值节点的方法来解决,但是会报错,找不出问题所在(在评论区也是一堆套用450代码报错的)。只能参考官网答案了。

官网的方法没有用delete,但是思想是一直向下遍历直到遇到不符合的节点,用NULL返回给该节点的上一层来完成修剪工作。你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if (root == nullptr ) return nullptr;
        if (root->val < low) {
            TreeNode* right = trimBST(root->right, low, high); // 寻找符合区间[low, high]的节点
            return right;
        }
        if (root->val > high) {
            TreeNode* left = trimBST(root->left, low, high); // 寻找符合区间[low, high]的节点
            return left;
        }
        root->left = trimBST(root->left, low, high); // root->left接入符合条件的左孩子
        root->right = trimBST(root->right, low, high); // root->right接入符合条件的右孩子
        return root;
    }
};

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

思路:本题较为简单,每次只取数组当前区间的中间节点构造就行了。

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return helper(nums, 0, nums.size() - 1);
    }

    TreeNode* helper(vector<int>& nums, int left, int right) {
        if (left > right) {
            return nullptr;
        }

        // 总是选择中间位置右边的数字作为根节点
        int mid = (left + right + 1) / 2;

        TreeNode* root = new TreeNode(nums[mid]);
        root->left = helper(nums, left, mid - 1);
        root->right = helper(nums, mid + 1, right);
        return root;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/solutions/312607/jiang-you-xu-shu-zu-zhuan-huan-wei-er-cha-sou-s-33/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

题目链接:538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

思路:本题最开始想用快慢指针法,每次快指针探路,慢指针指向节点累加快指针的值,但是这个思路并不好,因为实际操作起来不能总是保证每次需要改变的节点是慢指针指向的节点。故转而学习官网的逆序中序遍历法。

class Solution {
public:
    int sum=0;
    TreeNode* convertBST(TreeNode* root) {
        if(root){
            convertBST(root->right);
            sum+=root->val;
            root->val=sum;
            convertBST(root->left);
        }
        return root;
    }
};

二叉树总结篇 

代码随想录 (programmercarl.com)

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

相关文章

  • 百度搜索exgraph图执行引擎设计与实践
    导读百度搜索exgraph图执行引擎设计重点分成三个部分:图描述语言、图执行引擎、对接扩展。图描述语言是一种基于文本可读的图描述语言,用于描述任务中的算子以及算子之间的依赖关系,即让人可以理解,也可以被计算机理解并执行。图执行引擎是exgraph的核心,负责根据图描述语言生成的......
  • bs4搜索文档树
    数据准备:#导入模块frombs4importBeautifulSoup#查询数据文本html_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"id='id_xx'xx='zz'&......
  • 代码随想录算法训练营第二十三天 | 538.把二叉搜索树转换为累加树, 108.将有序数组转
     669.修剪二叉搜索树 已解答中等 相关标签相关企业 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树 不应该 改变保留在树中的元素的相对结构(即,如果......
  • leedcode 平衡二叉树
    对称二叉树走不通  201/228 个通过的测试用例classSolution:defisBalanced(self,root:Optional[TreeNode])->bool:queue=[root]ifnotroot:returnTrueifnotroot.leftandnotroot.right:returnTr......
  • 代码随想录 day55 最佳买卖股票时机
    最佳买卖股票时机含冷冻期1.[i][0]holdingthestock2.[i][1]aftercooldownbutstilnotbuingthestock3.[i][2]sellingthestock4.[i][3]cooldown就是在Ⅱ的基础上加入了第三四个状态这里必须分开才能表示出冷冻期内不能交易买卖股票的最佳时机含手续费......
  • (20/60)二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先
    过外婆八十寿宴,补卡二叉搜索树的最小绝对差leetcode:530.二叉搜索树的最小绝对差双指针中序遍历法思路搜索树的最小绝对差一定出现在中序遍历的相邻两个元素之间。设置前后两个指针,每次对比“历史最小”与当前node->val-pre->val的值哪个更小,进行相应更新。复杂度分析......
  • day29 回溯算法part5 代码随想录算法训练营 47. 全排列 II
    题目:47.全排列II我的感悟:用了一层判断,感觉也挺好用的理解难点:老师的写法,主要是理解used【i】和used[i-1]的概念我说怎么参考答案看不懂呢,它把两个判断放在一起写了。我的代码:用了一层判断classSolution:defpermuteUnique(self,nums:List[int])->List[Lis......
  • Google搜索操作符:让你秒变搜索专家
    搜索引擎对互联网的重要性不言而喻,不过,随着ChatGPT及其类似AI工具的推出,对搜索引擎带来了前所未有的挑战。因为ChatGPT具有自然语言处理能力,能够更好地理解用户的搜索意图,提供更准确、更相关的搜索结果。同时,还可以根据用户的搜索历史和行为数据,为用户提供更加个性化的搜索体验,推......
  • 代码随想录算法训练营第二十二天|235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树
    二叉搜索树的最近公共祖先 题目链接:235.二叉搜索树的最近公共祖先-力扣(LeetCode)思路:只要利用二叉搜索树特性,只要当前节点的值位于要求的两个节点之间,就必定是我们要找的节点。最简单的一集。classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,......
  • Spring Boot整合Postgres实现轻量级全文搜索
    有这样一个带有搜索功能的用户界面需求:搜索流程如下所示:这个需求涉及两个实体:“评分(Rating)、用户名(Username)”数据与User实体相关“创建日期(createdate)、观看次数(numberofviews)、标题(title)、正文(body)”与Story实体相关需要支持的功能对User实体中的评分(Rating)的频繁修......