算法训练营第二十五天 | LeetCode 669 修剪二叉树、

LeetCode 669 修剪二叉树

这题用层序遍历+双指针删除不符合条件的节点即可。具体是要用到一个虚拟根节点,双指针中prev指针每次指向队列顶元素,cur指针先指向prev左子节点,用循环去除这个位置上不符合条件的节点并连上继承节点,内部就是一个删除节点的操作。后指向prev右子节点,重复上述操作。此时若prev左子节点和右子节点仍不为空,则将它们入队列继续执行上述过程即可。

后面遇到一个栈溢出错误,上网查了资料知道是力扣隐藏的判题代码求我们将被剪的节点置空,所以又将每次去除后的节点的左子节点和右子节点都赋为nullptr了。

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {TreeNode* virtualRoot = new TreeNode(0);virtualRoot->left = root;queue<TreeNode*> myque;myque.push(virtualRoot);while (!myque.empty()) {int num = myque.size();while (num--) {TreeNode* prev = myque.front();TreeNode* cur = prev->left;while (cur && !(cur->val >= low && cur->val <= high)) {if (!cur->left && !cur->right) prev->left = nullptr;else if (!cur->left) {prev->left = cur->right; cur->right = nullptr;} else if (!cur->right) {prev->left = cur->left;cur->left = nullptr;}else {TreeNode* temp = cur->right;while (temp->left) temp = temp->left;temp->left = cur->left;prev->left = cur->right;cur->left = nullptr;cur->right = nullptr;}cur = prev->left;}if (prev->left) myque.push(prev->left);cur = prev->right;while (cur && !(cur->val >= low && cur->val <= high)) {if (!cur->left && !cur->right) prev->right = nullptr;else if (!cur->left) prev->right = cur->right;else if (!cur->right) prev->right = cur->left;else {TreeNode* temp = cur->left;while (temp->right) temp = temp->right;temp->right = cur->right;prev->right = cur->left;}cur->left = nullptr;cur->right = nullptr;cur = prev->right;}if (prev->right) myque.push(prev->right);myque.pop();}}return virtualRoot->left;}
};

LeetCode 108 将有序数组转化为二叉搜索树

用递归 + 二分查找的思路来处理就行了。

代码如下:

class Solution {
private:TreeNode* binaryBuild(vector<int>& nums , int l, int r) {if (l > r) return nullptr;int mid = (l + r) / 2;TreeNode* newNode = new TreeNode(nums[mid]);newNode->left = binaryBuild(nums, l, mid - 1);newNode->right = binaryBuild(nums, mid + 1, r);return newNode;}
public:TreeNode* sortedArrayToBST(vector<int>& nums) {return binaryBuild(nums, 0, nums.size() - 1);}
};

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

迭代法。按照右中左的顺序用一个变量依次累加每个节点的值,当到达一个节点时,先把该变量加上该节点的值,之后将该节点的值赋为该变量的值,即可满足条件。

代码如下:

class Solution {
public:TreeNode* convertBST(TreeNode* root) {TreeNode* cur = root;stack<TreeNode*> mysta;int sum = 0;while (cur || !mysta.empty()) {while (cur) {mysta.push(cur);cur = cur->right;}cur = mysta.top();sum += cur->val;cur->val = sum;mysta.pop();cur = cur->left;}return root;}
};

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

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

相关文章

“我们坚持开源!”阿里云发布“地表最强”中文大模型:半年一迭代、性能翻倍?

5 月 9 日&#xff0c;在通义大模型发布一周年之际&#xff0c;阿里云大模型生态迎来一次重大升级&#xff0c;主要有“四个最”&#xff1a; 通义千问 2.5 正式发布&#xff0c;“模型性能全面赶超 GPT-4 Turbo&#xff0c;成为地表最强中文大模型”&#xff1b;Qwen1.5-110B…

卷积特征图与感受野

特征图尺寸和感受野是卷积神经网络中非常重要的两个概念&#xff0c;今天来看一下&#xff0c;如何计算特征尺寸和感受野。 特征图尺寸 卷积特征图&#xff0c;是图片经过卷积核处理之后的尺寸。计算输出特征的尺寸&#xff0c;需要给出卷积核的相关参数包括&#xff1a; 输…

PC端与bluetooth蓝牙虚拟串口通信

应该采用RFCOMM虚拟串口方式来进行通信&#xff0c;原理跟socket通信类似&#xff0c;不同的是使用的通信协议不同&#xff0c;本人结合相关的API&#xff0c;做了以下最简单的封装。 1、获取本地蓝牙设备与附近蓝牙设备信息 2、通信类 /* 通信类&#xff1a;只是对于客户端通…

基于Python实现单例模式

目录 1、使用装饰器实现 2、使用__new__方法实现 单例模式是一种设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个唯一实例。这种模式在多种场景中都非常有用&#xff0c;以下是单例模式的一些常见应用场景&#xff1a; 应用程序的…

Spring线程池有哪些

目录 SimpleAsyncTaskExecutor SyncTaskExecutor ThreadPoolTaskExecutor ThreadPoolTaskScheduler Spring框架提供了多种线程池类型,以满足不同场景下的需求。以下是一些常见的Spring线程池类型: SimpleAsyncTaskExecutor 这个实现不重用任何线程,每次调用都会启动一…

抽空学学go

2024年5月9日11:14:24 学习go 看课8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili 文档[8小时转职Golang工程师 (yuque.com)]( 1.安装go 2024年5月9日11:27:16 2.安装 vscode go配置环境 vs code配置go开发环境 (zhihu.com) vscode里面配置代理&…

全志ARM-SG90舵机

控制转角 向黄色信号线“灌入”PWM信号。 PWM波的频率不能太高&#xff0c;50hz&#xff0c;即周期1/频率1/500.02s&#xff0c;20ms左右数据&#xff1a; 不同的PWM波形对应不同的旋转角度&#xff0c;以20ms为周期&#xff0c;50hz为频率的PWM波 定时器需要定时20ms,关心的单…

el-checkbox复选框做单选

思路&#xff1a;&#xff08;所有选择项都在一个数组中&#xff09;给每一个选项设置一个是否选中的属性&#xff08;checked&#xff09;&#xff0c;通过change事件来改变,数组中每一项的checked&#xff0c;如果change事件的值是true,那么就要把数组中&#xff08;如根据唯…

零基础入门篇①③ Python可变序列类型--列表

Python从入门到精通系列专栏面向零基础以及需要进阶的读者倾心打造,9.9元订阅即可享受付费专栏权益,一个专栏带你吃透Python,专栏分为零基础入门篇、模块篇、网络爬虫篇、Web开发篇、办公自动化篇、数据分析篇…学习不断,持续更新,火热订阅中🔥专栏限时一个月(5.8~6.8)重…

vue阶段案例,练习filter、map、forEach,双向绑定,三元表达式,以及图片滚动,文字跳动等等。

阶段案例 通过案例来练习双向绑定&#xff0c;三元表达式&#xff0c;以及图片滚动&#xff0c;文字跳动等等。 代码如下&#xff1a; <template><table class"bjtp" ><div class"title" >{{title}}</div><div class"s…

【解决Android Studio】cmake报错找不到vulkan包

1 报错信息 CMake Error at D:/Android/project/cmake/3.10.2.4988404/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Vulkan (missing: Vulkan_LIBRARY) Call Stack (most recent call first): 2. 错误原因 minSdk版本不对&am…

18.Blender 渲染工程、打光方法及HDR贴图导入

HDR环境 如何导入Blender的HDR环境图 找到材质球信息 在右上角&#xff0c;点击箭头&#xff0c;展开详细部分 点击材质球&#xff0c;会出现下面一列材质球&#xff0c;将鼠标拖到第二个材质球&#xff0c;会显示信息 courtyard.exr 右上角打开已渲染模式 左边这里选择世界…

动作识别 slowfast动作识别项目记录

动作识别 slowfast动作识别项目记录

如何在自己的服务器上快速搭建第一个网站(其一)

根据上篇文章相信很多人以及成功搭建服务器啦。今天我们讲下如何在自己的服务器快速搭建第一个网站的一些重要配置&#xff0c;以及搭建网站的必备环境。干货满满&#xff0c;希望大家能够关注点赞收藏。 我会不定期更新一些实用的工具&#xff0c;欢迎大家私信评论喔&#xf…

12个网上赚钱野路子信息差,人人可做的赚钱小项目!

在这个多元化的时代&#xff0c;副业已经成为许多人增加收入、实现自我价值的重要途径。今天&#xff0c;我们就来聊聊那些既有趣又能赚钱的副业项目&#xff0c;让你的钱包鼓起来&#xff01; 1.文字创作 写作不仅是情感的宣泄&#xff0c;更是财富的积累。无论是自媒体文、软…

事件代理 浅谈

事件代理是一种将事件处理委托给父元素或祖先元素来管理的技术。当子元素触发特定事件时&#xff0c;该事件不会直接在子元素上进行处理&#xff0c;而是会冒泡到父元素或祖先元素&#xff0c;并在那里进行处理。这样做的好处是可以减少事件处理函数的数量&#xff0c;提高性能…

VR智慧文旅:开启“韵味”旅游季的新篇章

为了充分满足游客的假日文化旅游需求&#xff0c;各地纷纷“解锁”新花样&#xff0c;沉浸式实景观展震撼“出圈”。在数字化浪潮的推动下&#xff0c;文化旅游行业正经历着变革&#xff0c;在万物皆可沉浸的时代&#xff0c;VR智慧文旅燃起了不一样的热度。 许多业内人士认为&…

hdfs磁盘清理历史数据

hdfs集群磁盘清理历史数据流程如下&#xff1a; #可以查看web界面hdfs集群的磁盘使用率,并记录下来,对比清理后的效果: 清理前 86.00% 194.24TB/225.85TB #统计warehouse目录下的磁盘使用量(目前表都是建在该路径下) hadoop fs -du -h /user/hive/warehouse #统计bak目录下磁…

Tiff文件解析和PackBits解压缩

实现了Tiff图片文件格式的解析&#xff0c;对Tiff文件中的PackBits压缩格式进行解压缩&#xff0c;对Tiff文件中每一个Frame转换成BufferedImage显示。 Java语言实现&#xff0c;Eclipse下开发&#xff0c;AWT显示图片。 public static TIFF Parse(final byte[] bytes) throw…

Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上

目录 步骤一&#xff1a;创建两个 Java 业务 Pod步骤二&#xff1a;创建一个 Nginx Pod步骤三&#xff1a;创建一个 Service步骤四&#xff1a;创建一个 Ingress注意事项 要在 Kubernetes 上搭建一个 Nginx 的 Pod&#xff0c;并确保传入的 API 请求被均匀地分发到两个 Java 业…