首页 > 其他分享 >Day57 代码随想录打卡|二叉树篇---修建二叉搜索树

Day57 代码随想录打卡|二叉树篇---修建二叉搜索树

时间:2024-06-21 19:01:24浏览次数:21  
标签:递归 随想录 high 二叉树 trimBST 打卡 root 节点 low

题目(leecode T669):

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

方法:同样使用递归法,分析三要素。

1:传入参数与返回值:传入树的节点指针,还有下限与上限。返回的是树节点指针。

2:终止条件:终止条件是遇到了空节点就直接返回。

3:单层处理逻辑:在每一次递归中,我们都要判断当前节点的值与low与high的关系。如果当前节点值小于low,那么应该往其右孩子递归;如果大于high,应该往其左孩子递归。随后用相应的根节点的左右孩子节点去接住返回的节点。如此重复直到为空即可。

题解:
 

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;
    }
};

标签:递归,随想录,high,二叉树,trimBST,打卡,root,节点,low
From: https://blog.csdn.net/m0_48909584/article/details/139867639

相关文章

  • 代码随想录Day1-二分查找法|快慢指针
    二分查找题目链接二分查找是一个较为基础的查找方式,对一个有序没有重复值的数组进行查找时,能够提供一个较好的时间复杂度\(O(log(n))\)算法概要对于有序并且没有重复值的数组来说,我们可以首先选定整个数组的中间下标,它的值则称为中间值,通过它把大数组分成两个小的数组,其中一个......
  • 代码随想录算法训练营第17天 | 二叉树04
    代码随想录算法训练营第17天找树左下角的值https://leetcode.cn/problems/find-bottom-left-tree-value/找树左下角的值代码随想录https://leetcode.cn/problems/find-bottom-left-tree-value/路径总和https://leetcode.cn/problems/path-sum/description/路径总和2https......
  • 算法题---二叉树层序遍历
    二叉树层序遍历:classTreeNode{TreeNodeleft;TreeNoderight;intvalue;}voidlevelTraversal(TreeNoderoot){Queue<TreeNode>q=newLinkedList<>();q.add(root);while(!q.isEmpty()){......
  • 6.20-合并二叉树
    617.合并二叉树题意描述:给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为null......
  • 代码随想录刷题复习day01
    day01数组-二分查找classSolution{publicintsearch(int[]nums,inttarget){//左闭右闭intleft=0;intright=nums.length-1;intmid=0;while(right>=left){mid=left+(right-le......
  • 昇思25天学习打卡营第1天 | 快速入门
    官网完整版代码详解题外话:这几天人工智能实训,在学深度学习,我觉得蛮像的过程理解:1.数据预处理1.1load数据集1.2查看数据集对象的结构和类型1.3数据变换MindSpore的dataset使用数据处理流水线(DataProcessingPipeline),需指定map、batch、shuffle等操作。使用map对图像数据......
  • Day56 代码随想录打卡|二叉树篇---删除二叉搜索树中的节点
    题目(leecodeT450):给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。方法:二叉搜索......
  • 【数据结构与算法】二叉树的性质 详解
    在二叉树的第i层上至多有多少个结点。在二叉树的第i层上至多有2i−1......
  • 【数据结构与算法】树,二叉树 详解
    给出树的不同的几种表示形式。邻接矩阵:这是一种二维数组,其中的元素表示两个节点之间是否存在边。这种表示形式适用于稠密图,但对于稀疏图可能会浪费很多空间。邻接表:这是一种数组和链表的组合结构。数组的每个元素都是一个链表,链表中的元素表示与该节点相连的其他节点。这种......
  • 昇思25天学习打卡营第2天|张量、数据集和数据变换
    张量Tensor张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在......