力扣爆刷第144天之二叉树四连刷(完结二叉搜索树改变树结构)

力扣爆刷第144天之二叉树五连刷(二叉搜索树)

文章目录

      • 力扣爆刷第144天之二叉树五连刷(二叉搜索树)
      • 一、450. 删除二叉搜索树中的节点
      • 二、669. 修剪二叉搜索树
      • 三、108. 将有序数组转换为二叉搜索树
      • 四、538. 把二叉搜索树转换为累加树

一、450. 删除二叉搜索树中的节点

题目链接:https://leetcode.cn/problems/delete-node-in-a-bst/description/
思路:删除二叉搜索树中的节点,这种改变树结构类型的题目,一定都是在树的遍历过程中,构造树,这个是一个解题的模板,也就是递归函数的返回值要作为父节点的左孩子或者右孩子。本题直接从上往下搜索,一旦搜索到,有两种解题方案,一种是找到左子树的最大值或者右子树的最小值,找到后替换子树的链接,然后作为root返回。注意边界条件控制。

class Solution {public TreeNode deleteNode(TreeNode root, int key) {if(root == null) return null;if(root.val > key) {root.left = deleteNode(root.left, key);}else if(root.val < key) {root.right = deleteNode(root.right, key);}else{if(root.left == null) return root.right;TreeNode p = root.left;TreeNode pro = p;while(p.right != null) {pro = p;p = p.right;}if(pro != p) {pro.right = p.left;p.left = root.left;p.right = root.right;}else{p.right = root.right;}return p;}return root;}
}

二、669. 修剪二叉搜索树

题目链接:https://leetcode.cn/problems/trim-a-binary-search-tree/description/
思路:和上一题类似,不过简单那很多,只需要递归遍历搜索到边界条件处即可停止。在遍历的过程中构建树,如果当前节点不在范围内,则直接返回子树结果(就是在结果树中剔除了当前节点),如果当前结果在范围内,则构建树,即用root的左右孩子接收递归寻找结果。

class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if(root == null) return null;if(root.val > high) {return trimBST(root.left, low, high);}else if(root.val < low) {return trimBST(root.right, low, high);}else {root.left = trimBST(root.left, low, high);root.right = trimBST(root.right, low, high);return root;}}
}

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

题目链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/
思路:通过有序数组构建平衡二叉搜索树,只需要采用二分查找的方法来构建二叉树,构建处来的一定是平衡二叉搜素树。

class Solution {public TreeNode sortedArrayToBST(int[] nums) {return buildTree(nums, 0, nums.length-1);}TreeNode buildTree(int[] nums, int left, int right) {if(left > right) return null;int mid = left + (right - left)/2;TreeNode root = new TreeNode(nums[mid]);root.left = buildTree(nums, left, mid-1);root.right = buildTree(nums, mid+1, right);return root;}
}

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

题目链接:https://leetcode.cn/problems/convert-bst-to-greater-tree/description/
思路:让把二叉搜索树改成累加树,累加树的要求是新节点为原节点加上比它大的所有节点,所以利用中序遍历的特性,采用右,中,左的方式进行遍历累加即可。

class Solution {int sum = 0;public TreeNode convertBST(TreeNode root) {traverse(root);return root;}void traverse(TreeNode root) {if(root == null) return;traverse(root.right);root.val += sum;sum = root.val;traverse(root.left);}
}

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

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

相关文章

【JavaScript】文件下载

文件下载的消息格式 服务器只要在响应头中加入 Content-Disposition: attachment; filename"kxx" 即可触发浏览器的下载功能其中&#xff1a; attachment 表示附件&#xff0c;浏览器看到此字段&#xff0c;触发下载行为&#xff08;不同的浏览器下载行为有所区别&…

CCF-GESP 等级考试 2024年3月认证C++一级真题解析

2024年03月真题 1 单选题 第 1 题 C表达式(3 - 2) * 3 5的值是( )。 A. -13B. 8C. 2D. 0 正确答案&#xff1a;B. 8 解析&#xff1a; 首先计算括号中的表达式 (3 - 2)&#xff0c;得到 (1)。接下来进行乘法运算 (1 * 3)&#xff0c;得到 (3)。最后进行加法运算 (3 5)&…

Linux:Ubuntu系统配置本地apt仓库

Linux&#xff1a;Ubuntu系统配置本地apt仓库 文章目录 Linux&#xff1a;Ubuntu系统配置本地apt仓库挂载本地的光驱到指定的挂载目录编辑开机挂载配置文件检查开机挂载配置文件的语法是否正确检查开机设置是否成功对原有的sourece.list文件进行重命名使其失效使用命令自动生成…

【二叉树】力扣OJ题

文章目录 前言1. 翻转二叉树1.1 题目1.2 解题思路1.3 代码实现1.4 时空复杂度 2. 对称二叉树2.1 题目2.2 解题思路2.3 代码实现2.4 时空复杂度 3. 平衡二叉树3.1 题目3.2 解题思路3.3 代码实现3.4 时空复杂度 结语 前言 本篇博客主要介绍二叉树的经典 OJ 题&#xff0c;题目主…

MyBatis详细教程!!(入门版)

目录 什么是MyBatis&#xff1f; MyBatis入门 1&#xff09;创建工程 2&#xff09;数据准备 3&#xff09;配置数据库连接字符串 4&#xff09;写持久层代码 5&#xff09;生成测试类 MyBatis打印日志 传递参数 MyBatis的增、删、改 增&#xff08;Insert&#xff0…

有什么普通人可以做的赚钱软件?盘点9个适合普通人长期做的软件

在这个互联网高速发展的时代&#xff0c;智能手机已经成为我们生活中不可分割的一部分。众多APP的涌现&#xff0c;使得许多朋友都在寻求通过手机赚钱的方法。 然而&#xff0c;面对市面上琳琅满目的网上赚钱APP&#xff0c;我们该如何挑选呢&#xff1f;别担心&#xff0c;今…

功率电感设计方法2:实例

文章目录 1&#xff1a;美磁的选项手册截图2&#xff1a;设计步骤2.1&#xff1a;设计需求2.2:选择磁芯材料2.3&#xff1a;选择磁芯2.4 查询 A L A_{L} AL​自感系数2.5 初算匝数2.6重新校准验算感量 3&#xff1a;后续 绕线因子4&#xff1a;日常壁纸分享 参考手册链接 1&…

普通人转行程序员,最大的困难是找不到就业方向

来百度APP畅享高清图片 大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站也叫这个名。 我自己是法学院毕业后&#xff0c;通过2年的努力才转行程序员成功的。[吃瓜R] 我发现对于一个外行来说&#xff0c;找不到一个适合自己的方向&#xff0c;光靠努力在一个新的行业里…

使用Java 将字节数组转成16进制的形式

概述 在很多场景下&#xff0c;需要进行分析字节数据&#xff0c;但是我们存起来的字节数据一般都是二进制的&#xff0c;这时候就需要我们将其转成16进制的方式方便分析。比如在做音视频的时候&#xff0c;需要看下我们传输的视频h264数据中是否有对应的I帧或者B帧等数据&…

纯前端实现将页面数据下载word文档中【包括图片,echarts图,表格,和对话 内容】

亲测真实有效 导出word步骤 在Vue中导出Word文档&#xff0c;可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库&#xff1a; npm install file-saver html-docx-js --save "html-docx-js": "0.3.1","file-saver": "2.0.5…

HADOOP permission denied解决方法(如果你ssh已经确认没问题了)

网上各种方法都是让你去把ssh配置好&#xff0c;让权限chmod 755&#xff0c;但我怎么试都没有用。 并且我的ssh已经能让master登入slave了&#xff0c;这个本来就是没有问题的。不要再尝试了。 有另一种可能的报错&#xff0c;就是你的文件全都被锁住了。可以上slave机上看看…

07、SpringBoot 源码分析 - SpringApplication启动流程七

SpringBoot 源码分析 - SpringApplication启动流程七 初始化基本流程SpringApplication的prepareContext准备上下文postProcessApplicationContext处理applyInitializers初始化器初始化load SpringApplication的refreshContext刷新上下文refreshServletWebServerApplicationCon…

8.什么是HOOK

程序编译的本质是&#xff0c;首先计算机它只能看得懂机器码也就是只能看得懂数字&#xff0c;机器码学起来很费劲然后就创造了编译器这个东西&#xff0c;编译器它懂机器语言所以它可以跟机器沟通&#xff0c;而我们人可以跟编译器沟通&#xff0c;人跟编译器的语言就是各种各…

[Vulnhub]Vulnix 通过NFS挂载+SSH公钥免密登录权限提升

端口扫描 Server IP AddressPorts Open192.168.8.103TCP:22/tcp, 25/tcp, 79/tcp, 110/tcp, 111/tcp, 143/tcp, 512/tcp, 513/tcp, 514/tcp, 993/tcp, 995/tcp, 2049/tcp, 37522/tcp, 42172/tcp, 43219/tcp, 47279/tcp, 54227/tcp $ nmap -p- 192.168.8.103 -sV -sC --min-ra…

P1134 [USACO3.2] 阶乘问题

题目传送门&#xff1a; P1134 [USACO3.2] 阶乘问题 29分代码 #include<bits/stdc.h>using namespace std;int main() {int n;cin>>n;unsigned long long s1;for(int i1;i<n;i){s*i;while(s>10){if(s%100) s/10;else ss%10;}}cout<<s%10<<en…

MyBatis系统学习 - 使用Mybatis完成查询单条,多条数据,模糊查询,动态设置表名,获取自增主键

上篇博客我们围绕Mybatis链接数据库进行了相关概述&#xff0c;并对Mybatis的配置文件进行详细的描述&#xff0c;本篇博客也是建立在上篇博客之上进行的&#xff0c;在上面博客搭建的框架基础上&#xff0c;我们对MyBatis实现简单的增删改查操作进行重点概述&#xff0c;在MyB…

P459 包装类Wrapper

包装类的分类 1&#xff09;针对八种基本数据类型相应的引用类型——包装类。 2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法。 Boolean包装类 Character包装类 其余六种Number类型的包装类 包装类和基本数据类型的相互转换 public class Integer01 {publi…

一文入门ZooKeeper

简介 官网&#xff1a;https://zookeeper.apache.org/index.html 分布式服务协调组件&#xff0c;Google Chubby的开源实现。解决分布式应用中的以下问题&#xff1a;配置管理、命名服务&#xff08;Naming Service&#xff09;、集群管理、统一命名服务、状态同步。 用于解决…

清理这8种微信好友,每年多赚30万,看完让你涨知识!

为什么我们通讯录里面有很多好友&#xff0c;而我们却总是过很清贫&#xff1f;为什么我们通讯录本身有几千的好友&#xff0c;却通过微信好友却无法变现&#xff1f; 在我第二次创业失败的时候&#xff0c;我从整理朋友圈&#xff0c;整理微信通讯录&#xff0c;到清理微信好…

解决文件夹打开出错问题:原因、数据恢复与预防措施

在我们日常使用电脑或移动设备时&#xff0c;有时会遇到一个非常棘手的问题——文件夹打开出错。这种错误可能会让您无法访问重要的文件和数据&#xff0c;给工作和生活带来极大的不便。本文将带您深入了解文件夹打开出错的原因&#xff0c;并提供有效的数据恢复方案&#xff0…