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

平衡树、二叉树、灵活应用中序遍历(值大小有序)

669. 修剪二叉搜索树

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

发现规律:
二叉搜索树特性:左子树均小于根节点,右子树均大于根节点,所以若值不在区间则只需要保留其中一条子树;否则正常遍历处理

class Solution {
public:
//二叉搜索树特性:左子树均小于根节点,右子树均大于根节点,所以若值不在区间则只需要保留其中一条子树TreeNode* trimBST(TreeNode* root, int low, int high) {if(root == nullptr) return nullptr;if(root->val > high) {return trimBST(root->left, low, high);}else if(root->val < low) {return trimBST(root->right, low, high);}root->left = trimBST(root->left, low, high);root->right = trimBST(root->right, low, high);return root;}
};

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

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

思路: 为使平衡,则取升序序列中间值为分割点(根节点),以分割点为界,左序列为左子树,右序列为右子树

class Solution {
public:
//平衡二叉搜索树,即二叉搜索树中每个节点的左右子树高度差绝对值相差不会超过1
//为使平衡,则取升序序列中间值为分割点(根节点)TreeNode* ArrayToBst(vector<int>& nums, int left, int right){if(left > right) return nullptr;TreeNode* root = new TreeNode();int mid = left + (right - left)/2;root->val = nums[mid];root->left = ArrayToBst(nums, left, mid-1);root->right = ArrayToBst(nums, mid+1, right);return root;}TreeNode* sortedArrayToBST(vector<int>& nums) {if(nums.empty()) return nullptr;return ArrayToBst(nums, 0, nums.size()-1);}
};

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

思路:
从示例1可以看出 累加树逆中序(与正常中序不同,先访问右节点,后访问左节点)的节点值为降序累加序列
示例1

class Solution {
public:
//从示例1可以看出 累加树逆中序(与正常中序不同,先访问右节点,后访问左节点)的节点值为降序累加序列TreeNode* ToSumTree(TreeNode* root, int &num){if(root == nullptr) return nullptr;root->right = ToSumTree(root->right, num);num += root->val; //中序遍历保证访问序列值有序root->val = num;root-> left = ToSumTree(root->left, num);return root;}TreeNode* convertBST(TreeNode* root) {int num = 0;return ToSumTree(root, num);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/697693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Window部署SkyWalking

SkyWalking mysql的驱动依赖 选择下载版本 v9.4 现在后解压缩目录结构 一、修改config目录文件 application.yml 修改1&#xff1a; selector: ${SW_STORAGE:h2} 修改后&#xff1a; selector: ${SW_STORAGE:mysql} 修改2&#xff1a;使用mysql数据库 mysql: properti…

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…

Centos7配置静态IP详细步骤

使用Centos虚拟机测试时一到切换网段就头疼&#xff0c;总是会有ping不通网关、同段IP和外网的情况。下面出一个尽可能完整的排查思路和配置静态IP的过程。以下为配置nat模式后&#xff0c;出现以上情况的网络不通的排查思路&#xff0c;并配置win10vm8静态IP和centos7虚机nat模…

SQL字符集

目标:了解字符集的概念&#xff0c;掌握MySQL数据库存储数据的字符集逻辑以及设置方式 字符集概念 MySQL字符集关系 解决乱码问题 字符集设置原理 1、字符集概念 目标:了解字符集概念&#xff0c;掌握字符集存储和读取的实现原理 概念 字符集:charset或者character set&am…

(十二)【Jmeter】线程(Threads(Users))之setUp 线程组

简述 操作路径如下: 作用:在正式测试开始前执行预加载或预热操作,为测试做准备。配置:设置预加载或预热操作的采样器、循环次数等参数。使用场景:确保在正式测试开始前应用程序已经达到稳定状态,减少测试结果的偏差。优点:提供预加载或预热操作,确保测试的准确性。缺…

2024幻兽帕鲁游戏服务器租用价格表_一年和1个月报价明细

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云4核16G10M游戏服务器26元1个月、149元半年&#xff0c;腾讯云4核16G游戏服务器32元、312元一年&#xff0c;华为云26元&#xff0c;京东云主机也是26元起&#xff0c;游戏服务器配置从4核16G、4…

代码随想录算法刷题训练营day22

代码随想录算法刷题训练营day22&#xff1a;LeetCode(236)二叉树的最近公共祖先、LeetCode(235) 二叉搜索树的最近公共祖先、LeetCode(701)二叉搜索树中的插入操作、LeetCode(450)删除二叉搜索树中的节点 LeetCode(236)二叉树的最近公共祖先 题目 代码 /*** Definition for…

【鸿蒙 HarmonyOS 4.0】路由router

一、介绍 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块&#xff0c;通过不同的url地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。 二、页面跳转 2.1、两种跳转模式&#xff1a; router.pushUrl()&…

安卓游戏开发之音频技术优劣分析

一、引言 在安卓游戏开发中&#xff0c;音频处理技术扮演着至关重要的角色&#xff0c;它不仅能够增强游戏的沉浸感和玩家体验&#xff0c;还能通过声音效果传达关键的游戏信息。以下将对几种常见的安卓游戏音频处理技术进行优劣分析&#xff0c;并结合应用场景来阐述其特点。 …

微服务-微服务API网关Spring-clould-gateway实战

1. 需求背景 在微服务架构中&#xff0c;通常一个系统会被拆分为多个微服务&#xff0c;面对这么多微服务客户端应该如何去调用呢&#xff1f; 如果根据每个微服务的地址发起调用&#xff0c;存在如下问题&#xff1a; 1.客户端多次请求不同的微服务&#xff0c;会增加客户端…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件&#xff0c;它继承自QEvent类。 2. 事件和信号 事件与信号并不相同&#xff0c;比如我们使用鼠标点击了一下界面上的按钮&#xff0c;那么就会产生…

node 之 初步认识

思考&#xff1a;为什么JavaScript可以在浏览器中被执行 代执行的js代码——JavaScript解析引擎 不同的浏览器使用不同的JavaScript解析引擎 Chrome 浏览器 》 V8 Firefox浏览器 》OdinMonkey(奥丁猴&#xff09; Safri浏览器 》JSCore IE浏览器 》Chakra(查克拉&#xff09; e…

XML的写法

下面我将以如下代码来解释下XML的写法 <?xml version"1.0" encoding"UTF-8" ?> <Steam><steam id"1"><zhanghao>admin</zhanghao><mima>123</mima><num>120</num></steam><st…

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了&#xff01;&#xff01;&#xff01;金航标kinghelm&#xff08;www.kinghelm.com.cn&#xff09;总部位于中国深圳市&#xff0c;兼顾技术、成本、管理、效率和可持续发展。东莞塘厦实验室全电波暗室、网络分析…

运维SRE-06 阶段性复习软件管理体系

那些年运维必会操作-第一弹 操作 文件&#xff1a;增删改查 增&#xff1a;touch,vim,>,>>,cp删除&#xff1a;rm修改&#xff1a;内容&#xff1a;vi/vim,>,>> 文件名&#xff1a;mv查看&#xff1a;内容&#xff1a;cat/vim/less/more/head/tail/sed/awk/…

Day03-课后练习-参考答案(流程控制_分支结构)(判断年、月、日是否合法,判断打鱼还是晒网,判断星座)

文章目录 巩固题1、从键盘输入一个整数&#xff0c;判断它是否是5的倍数2、从键盘输入一个字符&#xff0c;判断字符类型3、计算折扣后金额4、输出月份对应的英语单词5、计算今天是星期几 简答题拔高题&#xff08;自愿&#xff09;6、判断年、月、日是否合法7、判断打鱼还是晒…

【C++】STL容器之string(迭代器,范围for)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

ubuntu内核卸载重装

目录 问题1.问题复现2.可以正常启动的方式 保存快照卸载有问题的内核重装最新内核参考资料 问题 1.问题复现 ubuntu开机出现如下画面,启动不能正常启动 2.可以正常启动的方式 使用其他内核可以正常工作 保存快照 在解决之前保存快照,防止破坏时恢复 卸载有问题的内核…

微信小程序开发:通过wx.login()获取用户唯一标识openid和unionid

下面代码展示了 openid 的获取过程。 想获取 unionid 需要满足条件&#xff1a;小程序已绑定到微信开放平台账号下&#xff0c;不然只会返回 openid。 【相关文档】 微信小程序开发&#xff1a;appid 和 secret 的获取方法 wx.login({success (res) {if (res.code) {// 发起网…

无心剑小诗《斜杠青年赞歌》

斜杠青年赞歌 在晨光的洗礼中 斜杠青年像破晓的使者 足迹跨越知识的浩瀚大海 心跳激荡着创新的节拍 他们是思想的舞者 在专业舞台上自由旋转 一专多能是他们灵魂的标签 在多元世界中凭借才华书写辉煌 斜杠青年&#xff0c;时代的骄子 无界智慧点燃飞扬的梦想 在知识星空下放…