leetcode刷题 | 关于二叉树的题型总结3
leetcode刷题 | 关于二叉树的题型总结3
文章目录
- leetcode刷题 | 关于二叉树的题型总结3
- 题目连接
- 递增顺序搜索树
- 二叉搜索树中的中序后继
- 把二叉搜索树转换为累加树
- 二叉搜索树迭代器
题目连接
897. 递增顺序搜索树 - 力扣(LeetCode)
剑指 Offer II 053. 二叉搜索树中的中序后继 - 力扣(LeetCode)
538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)
173. 二叉搜索树迭代器 - 力扣(LeetCode)
递增顺序搜索树
二叉树本身是有序的,可以采用左中右的遍历顺序,使用一个prev节点保存前一个结点
class Solution {TreeNode prev = new TreeNode(-1);TreeNode node = prev;public TreeNode increasingBST(TreeNode root) {dfs(root);return node.right;}public void dfs(TreeNode root){if(root == null) return ;dfs(root.left);prev.right = root;root.left = null;prev = root;dfs(root.right);}
}
二叉搜索树中的中序后继
dfs+中序遍历
class Solution {TreeNode res = null;public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {dfs(root,p);return res;}public TreeNode dfs(TreeNode root,TreeNode p){if(root == null) return null;if(root.val > p.val){res = root;return inorderSuccessor(root.left,p);}else return inorderSuccessor(root.right,p);}
}
使用二分查找到找到cur=p的节点,使用prev记录cur的root节点
然后判断cur节点是否有右子树,如果存在则返会右子树的最左边的节点
如果没有右子树那么直接返会prev,因为pre > cur = p
class Solution { public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {TreeNode cur = root;TreeNode prev = null;while(cur != p){if(cur.val > p.val){prev = cur;cur = cur.left;}else{cur = cur.right;}} if(cur.right != null){cur = cur.right;while(cur.left != null){cur = cur.left;}return cur;}return prev;}
}
把二叉搜索树转换为累加树
class Solution {int sum = 0;public TreeNode convertBST(TreeNode root) {if(root == null) return null;convertBST(root.right);root.val += sum; //将当前节点值和大于当前节点值的和相加sum = root.val; convertBST(root.left);return root;}
}
使用右中左逆序中序遍历的方式并使用栈来存放前一个节点
当cur=null时遍历到了叶子节点,dep.poll() 得到该节点的父节点,将cur = 该父节点
更新cur父节点的val值,题目要求值等于原树中大于或等于 node.val 的值之和,使用sum来保存和
因为使用右中左的遍历顺序,sum始终都是累加
class Solution {public TreeNode convertBST(TreeNode root) {int sum = 0;Deque<TreeNode> deq = new ArrayDeque(); TreeNode cur = root;while(!deq.isEmpty() || cur != null){if(cur != null){deq.push(cur);cur = cur.right;}else{cur = deq.poll();sum += cur.val;cur.val = sum;cur = cur.left;}}return root;}
}
二叉搜索树迭代器
先获得中序遍历结果,然后遍历
class BSTIterator {List<TreeNode> list = null;int index;int siez;public BSTIterator(TreeNode root) {list = new ArrayList<>();index = -1;dfs(root);this.siez = list.size();}public int next() {return list.get(++index).val;}public boolean hasNext() {if (index >= siez-1) return false;return true;}public void dfs(TreeNode root){if (root == null) return ;dfs(root.left);list.add(root);dfs(root.right);}
}
使用栈存入全部的左子节点和根节点
class BSTIterator {Deque<TreeNode> deq = new ArrayDeque<>();public BSTIterator(TreeNode root) {TreeNode node = root;while (node != null){deq.push(node);node = node.left;}}public int next() {TreeNode cur = deq.poll();if(cur.right != null){TreeNode node = cur.right;while(node != null){deq.push(node);node = node.left;//把所有的左节点都放入deq}}return cur.val;}public boolean hasNext() {return !deq.isEmpty();}
}
相关文章:
leetcode刷题 | 关于二叉树的题型总结3
leetcode刷题 | 关于二叉树的题型总结3 文章目录leetcode刷题 | 关于二叉树的题型总结3题目连接递增顺序搜索树二叉搜索树中的中序后继把二叉搜索树转换为累加树二叉搜索树迭代器题目连接 897. 递增顺序搜索树 - 力扣(LeetCode) 剑指 Offer II 053. 二…...
设计模式-结构型
设计模式-结构型 结构型设计模式包含:代理模式、适配器模式、桥接模式、装饰模式、外观设计模式、享元模式、组合模式 代理模式 核心是在具体的功能类与使用者之间建立一个中介类作为代理,使用者通过代理对象对真实的功能类进行访问。 在iOS开发中&am…...
【新】华为OD机试 - 预订酒店(Python)| 运气好 会考到原题
预订酒店 题目 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为 n 的数组 A),他的心理价位是 x 元,请帮他筛选出 k 个最接近 x 元的酒店(n>=k>0),并由低到高打印酒店的价格。 输入 第一行:n, k, x 第二行:A[0] A[1] A[2]...A[n-…...
【编程基础之Python】4、安装Python开发工具
【编程基础之Python】4、安装Python开发工具安装Python开发工具为什么需要开发工具Anaconda自带的开发工具PyCharm安装PyCharm运行PyCharm并创建项目总结安装Python开发工具 为什么需要开发工具 通常情况下,为了提高开发效率,需要使用相应的开发工具&a…...
5. 最长回文子串
文章目录题目描述暴力法中心扩散法参考文献题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s “babad” 输出:“bab” 解释&a…...
内网渗透(二十四)之Windows协议认证和密码抓取-Mimikatz读取sam和lsass获取密码
系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...
【THREE.JS】网页中的炫酷3D
web3d一、前言粒子特效二维漫画可视化后期处理二、项目使用流程2.1 项目结构2.2 基本使用2.3 项目模板2.4 技术栈三、基础动画3.1 THREE.Clock3.2 GASP四、照相机8.1 正交相机8.2 透视相机4.3 相机控制器五、画布和全屏六、几何体七、Debug UI八、纹理贴图8.1 mipmapping8.2 放…...
Go语言之 下载安装go以及vscode配置go环境
上篇请移步到Go语言之 下载安装及第一个代码_水w的博客-CSDN博客 目录 一、下载安装以及配置go环境 1 下载安装go 2 配置go环境 二、安装配置git 一、在vscode上开发golang 1 配置 2 编写代码 解决报错:go: go.mod file not found in current directory or …...
RBAC权限 API声明四种kubernetes对象
RBAC API声明了四种kubernetes对象: Role ClusterRole RoleBinding ClusterRoleBinding Role: 名称空间内创建授权角色,指定空间名字 ClusterRole: 全局角色,集群范围,对所有名称空间有效 RoleBinding: 名称…...
CDGP仿真选择题4
CDGP仿真选择题13、指标(Metrics)可以用来衡量数据管理的效果。请从下列选项中选择正确的表述: (知识点: CDGP仿真题)A.指标是衡量或评估绩效、进度、质量、效率或其他影响的标准B.这些指标用于定义每个知识领域内完成工作的可量化事实C.指标也可以测量更抽象的特性,…...
典型相关分析与R语言实现
典型相关分析学习目标学习内容典型相关分析的原理典型相关分析的理论内容例子具体实现方法内容小结注意解决方法学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关于 典型相关分析 学习内容 首先声明,典型相关分析的内容理解…...
【蓝桥集训】第一天——前缀和
作者:指针不指南吗 专栏:Acwing 蓝桥集训每日一题 🐾输出的时候,注意数据类型🐾 文章目录1.截断数组2.前缀和3.子矩阵的和4.k倍区间1.截断数组 给定一个长度为 n 的数组 a1a_1a1,a2a_2a2,…,ana_nan。 现在&…...
2022-03-19青少年软件编程(C语言)等级考试试卷(六级)解析
青少年软件编程(C语言)等级考试试卷(六级) 一、编程题(共4题,共100分)T1.多项式相加 我们经常遇到两多项式相加的情况,在这里,我们就需要用程序来模拟实现把两个多项式相加到一起。首先,我们会有两个多项式,每个多项式是独立的一行,每个多项式由系数、幂数这样的多个…...
[JavaScript 刷题] 特殊数组的特征值, leetcode 1608
[JavaScript 刷题] 特殊数组的特征值, leetcode 1608 这道题在一个列表上看到的,刚开始用暴力解想过了就过了,不过后面看了一下关键字,发现解法……非常有趣。 时间复杂度可以从 O(n2)O(n^2)O(n2) 降为 O(nlog(n))O(n log(n))O(nlog(n))&am…...
各种素材网站大全【全部倾倒,福利倒计时-JS,HTML,游戏素材,UI,图片素材等
👨💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:解忧杂货铺 ⭐各种素材网站大全⭐ 文章目录⭐各种素材网站大全⭐🎶大家必逛的四大天王…...
影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入
使用过NAS(Network Attached Storage)的朋友都知道,它可以通过局域网将本地硬盘转换为局域网内的“网盘”,简单理解就是搭建自己的“私有云”,但是硬件和网络成本都太高了,有点可望而不可及的意思。Alist开源库则可以满足我们&…...
【新】华为OD机试 - 数组的中心位置(Python)| 运气好,这就是原题
数组的中心位置 题目 给你一个整数数组nums,请计算数组的中心位置。 数组中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。 数组第一个元素的左侧积为1,最后一个元素的右侧积为1。 如果数组有多个中心位置,应该返回最靠近左边的那一个。 如果数…...
小米电视安装 Plex 打造家庭影院
背景 最近突然想重温教父,本来想着直接投屏就可以,后来看了别人搭建的基于 NAS 的家庭影院很动心,也想依葫芦画瓢做一个,跟对象申请经费的时候被拒了,理由是有这钱还不如开个会员直接看。 我寻思不同电影在不同的平台…...
Elasticsearch:Combined fields 查询
有时一个匹配项可以覆盖多个文本字段。 在这种情况下,你可以使用 combined_fields 查询来搜索多个文本字段,就好像它们的值实际上已被索引到一个组合字段中一样。 除此之外,combined_fields 的主要好处是强大且易于理解的评分算法。这种做法也…...
uart 子系统
串口硬件储备知识: uart 在Linux 应用层的体现及使用 uart 就是串口,它也是属于字符设备中的一种,众所周知 字符设备都会在/dev/ 目录下创建节点,串口所创建的节点名都是以tty* 为开头,例如下面这些节点:…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
