力扣 669. 修剪二叉搜索树

news/2024/11/23 5:12:04/

题目来源:https://leetcode.cn/problems/trim-a-binary-search-tree/description/

 

 C++题解1:递归法。当前节点为空时返回空,不为空时对其值进行分类讨论。以low为例,当前节点值等于low时,意味着其左子树都要丢弃,可指向空;大于low时,说明其左子树也可能满足条件,因此对其左子树进一步递归;小于low时,说明当前节点及其左子树都不满足条件,将当前节点更新为其右子节点。

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(!root) return nullptr;if(root->val == low) root->left = nullptr; else if(root->val > low) {root->left = trimBST(root->left, low, high);}else {root = root->right;return trimBST(root, low, high);}if(root->val == high) root->right = nullptr;else if(root->val < high) {root->right = trimBST(root->right, low, high);}else {root = root->left;return trimBST(root, low, high);}return root;}
};

C++题解2:递归法。大致思路同上,较为精简,来源代码随想录。

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

C++题解3:迭代法。见注释,来源代码随想录。

class Solution {
public:TreeNode* trimBST(TreeNode* root, int L, int R) {if (!root) return nullptr;// 处理头结点,让root移动到[L, R] 范围内,注意是左闭右闭while (root != nullptr && (root->val < L || root->val > R)) {if (root->val < L) root = root->right; // 小于L往右走else root = root->left; // 大于R往左走}TreeNode *cur = root;// 此时root已经在[L, R] 范围内,处理左孩子元素小于L的情况while (cur != nullptr) {while (cur->left && cur->left->val < L) {cur->left = cur->left->right;}cur = cur->left;}cur = root;// 此时root已经在[L, R] 范围内,处理右孩子大于R的情况while (cur != nullptr) {while (cur->right && cur->right->val > R) {cur->right = cur->right->left;}cur = cur->right;}return root;}
};


http://www.ppmy.cn/news/695117.html

相关文章

小明开了一家糖果店、把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖 小朋友来买糖的时候,他就用两种包装来组合,当然有些糖果数目是无法组合出来的,比如要买10颗糖 在这种包装情况下,最大不能买到

解法一&#xff1a; import java.util.Scanner;/**小明开了一家糖果店、把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖 小朋友来买糖的时候&#xff0c;他就用两种包装来组合&#xff0c;当然有些糖果数目是无法组合出来的&#xff0c;比如要买10颗糖在这种包装情况下&…

STK。在地面能够“看到”多少颗GPS卫星

(STK。在地面能够“看到”多少颗GPS卫星) 当时收集到的agi官方的资料。 地址&#xff1a; 盘 点 百度 点com/s/1dU22GDTVrZ3SfelcIRA3wQ?pwdabcd 提取码:abcd 当时从stk官网下载到的一些官方资料&#xff0c;不全。如果有需要可以搭梯子去外网搜索。从他们官网上下载文章和观…

如何直观的打印一颗二叉树

如何直观的打印一颗二叉树 打印的结果是需要顺时针旋转90度的&#xff0c;如下面的结果打印出来是这样的。 如何打印呢? 需要处理以下四个问题&#xff1a; 遍历树的顺序是 右子树->根->左子树&#xff1b;因为要避免数字长度影响对齐的因素&#xff0c;所以两边补…

用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树

用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树。 首先说明&#xff1a;思想来自文都考研洪老师。包括逻辑框架的搭建&#xff0c;此篇文章为框架搭建完成后将细节补充完整。 首先&#xff0c;用到的数学的证明思想是第二类数学归纳法&#xff…

gps有几个轨道面_GPS(全球定位系统)的 24 颗卫星的轨道是如何设计的?

谢邀,先稍微补充下背景知识, 任何一颗卫星在设计时,都要考虑六个参数,叫做轨道六根数 两个决定了卫星轨道的形状:1)轨道半长轴,决定了轨道大概多大,或者距离地球有多高;2)偏心率决定了大概多扁,偏心率为0就是圆了 四个决定了卫星轨道的位置:3)轨道倾角,决定了轨道与…

前序遍历和中序遍历唯一确定一颗二叉树

---恢复内容开始--- 问题描述 如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一颗二叉树。 基本要求 已知一棵二叉树的前序序列和中序序列,试设计完成下列任务的一个算法: (1).构造一颗二叉树 (2).证明构造正确(即分拨儿以前序和中序遍历该树,将得到的…

删除一颗二叉树

package tree;public class DeleteBT {/*** 删除一颗二叉树* param args*/public static TreeNode delete(TreeNode root){if(rootnull) return root;root.left delete(root.left);root.right delete(root.right);return null;}public static void main(String[] args) {Tree…

题目: 打印输出上下左右对称的,第一行一颗星,第二行三颗星,第三行五颗星,第四行七颗星,第五行五颗星,第六行三颗星,第七行一颗星

题目: 打印输出 * *** ***** ******* ***** *** * /* 分析: 前4行,行数1 2 3 4 i空格数3 2 1 0 4-i星数1 3 5 7 2*i-1 后3行,行数1 2 3 i空格数1 2 3 i星数5 3 1 7-2*i*/ class Test14 {public static void main(String[] a…