[Leedcode][JAVA][第98题][验证二叉搜索树]

【问题描述】[第98题][验证二叉搜索树][中等]

给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

【解答思路】

1.中序遍历

中序遍历是二叉树的一种遍历方式,它先遍历左子树,再遍历根节点,最后遍历右子树。而我们二叉搜索树保证了左子树的节点的值均小于根节点的值,根节点的值均小于右子树的值,因此中序遍历以后得到的序列一定是升序序列。

时间复杂度:O(N) 空间复杂度:O(N)
1.1 递归

class Solution {long pre = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if (root == null) {return true;}// 访问左子树if (!isValidBST(root.left)) {return false;}// 访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回 false;否则继续遍历。if (root.val <= pre) {return false;}pre = root.val;// 访问右子树return isValidBST(root.right);}
}

1.2 栈

class Solution {public boolean isValidBST(TreeNode root) {Stack<TreeNode> stack = new Stack();double inorder = - Double.MAX_VALUE;while (!stack.isEmpty() || root != null) {while (root != null) {stack.push(root);root = root.left;}root = stack.pop();// 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树if (root.val <= inorder)return false;inorder = root.val;root = root.right;}return true;}
}
2. 递归

在这里插入图片描述

时间复杂度:O(N) 空间复杂度:O(N)

public boolean helper(TreeNode node, Integer lower, Integer upper) {if (node == null) return true;int val = node.val;if (lower != null && val <= lower) return false;if (upper != null && val >= upper) return false;if (! helper(node.right, val, upper)) return false;if (! helper(node.left, lower, val)) return false;return true;}public boolean isValidBST(TreeNode root) {return helper(root, null, null);}

【总结】

1. 二叉树遍历
  • 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点
  • 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点
  • 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输出当前结点的数据
2. 递归思想 想清楚子问题
3. 审题要全面 整体把握 分布思考清楚边界

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

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

相关文章

图解CPU?

了解CPU 芯片组 CPU微观图 Cache层次结构 Cache-续 Xeon 5600系列CPU CPU内部各部件访问速度 False sharing问题 Cache lines Intel Sandy Bridge来了 CPU拓扑结构图 Cache相关硬件事件

c语言获取dll文件路径,C语言URLDownloadToFile获取文件下载进度

URLDownloadToFile是urlmon.dll提供的网络操作API&#xff0c;可以用于从指定的URL下载文件到本地&#xff0c;在C中通过类很容易实现下载进度的获取&#xff0c;今天需要在C语言中使用到这个函数&#xff0c;这里记录一下使用方法。该函数的定义如下所示。HRESULT URLDownload…

HOG特征人体检测

1. 引言 HOG&#xff08;Histogram of Oriented Gradient&#xff09;&#xff0c;即方向梯度直方图。它通过计算和统计局部区域的梯度方向直方图来构成特征&#xff0c;一般与SVM分类器结合用于目标的图像识别。由于人体姿势和外表的多变&#xff0c;在图像中检测人体是一项具…

[Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

【问题描述】[Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置&#xff0c;跳 1 步&#xff0c;然后跳 3 步到达数组的最后一个位置。【解答思路】 1. 动态规划 超时 第 1 步&…

大型动态应用系统平台系统架构?这些大家并不陌生

大型动态应用系统平台系统架构[多图] 动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式…

c语言round函数能四舍五入吗,怎么利用round函数实现四舍五入?

Excel强大的制表功能让很多人都对它无比依赖&#xff0c;它也早已成为日常必备的工具。我们在办公室工作时&#xff0c;经常会遇到要用 Excel处理数字的情况&#xff0c;需要对其进行四舍五入。那么实现这一操作&#xff0c;我们需要使用哪些Excel函数呢&#xff1f;今日小编就…

洛谷 - P2181 - 对角线 - 打表 - 组合数学

https://www.luogu.org/problemnew/show/P2181 对于某条对角线&#xff0c;除去从两端出发的对角线&#xff0c;其他的都与它有1个交点。 每个点有(n-3)条对角线&#xff0c;每条对角线和其余C(n-2,2)条对角线都有1个交点&#xff0c;共有n个点&#xff0c;重复计算交点再除以2…

InnoDB 事务/锁/多版本分析?你了解多少?

目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序列锁(autoinc lock) – 半一致读(semi-consistent read) – 隐式锁(implicit lock) • InnoDB多版本 – ReadView –…

[剑指offer]面试题第[42]题[Leedcode][JAVA][第53题][最大子序和][动态规划][贪心][分治]

【问题描述】[第53题][最大子序和][中等] 给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大…

排队枪毙游戏c语言,基于C语言实现的约瑟夫生者死者游戏

1 项目简介约瑟夫生者死者游戏的大意是&#xff1a;30个旅客同乘一条船&#xff0c;因为严重超载&#xff0c;加上风高浪大危险万分&#xff1b;因此船长告诉乘客&#xff0c;只有将全船一半的旅客投入海中&#xff0c;其余人才能幸免于难。无奈&#xff0c;大家只得统一这种方…

[Leedcode][JAVA][第983题][最低票价][动态规划]

【问题描述】[第983题][最低票价][中等] 在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式&#xff1a;一张为…

disperse函数 C语言,武汉工业学院电气1006班C语言测试题.doc

1006班C语言测试题姓名&#xff1a; 学号&#xff1a;1.以下程序的输出结果为( )。   main( )    { int i010,j10;    printf("%d,%d\n",i,j--);   } A 11,9 B 9,10 C 8,10 D 9,92&#xff0e;设a为int型变量&#xff0c;执行下列赋值语句后&#xff0c;a的取…

[Leedcode][JAVA][第572题][另一个树的子树]

【问题描述】 给定两个非空二叉树 s 和 t&#xff0c;检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1: 给定的树 s:3/ \4 5/ \1 2 给定的树 t&#xff1a;4 / \1 2 返回…

LVS在淘宝环境中的应用

目录 1. LVS-简介 2. LVS-问题 3. LVS-fullnat 4. LVS-synproxy 5. LVS-cluster 6. LVS-performance 7. LVS-todo list 疑问引入:用户访问淘宝&#xff0c;访问哪台apache服务器 传统做法&#xff1a;DNS服务 四个问题 Q1&#xff1a;apache2 down&#xff0c;remove生…

android 开发艾特功能,Android Binder

Binder 是一种进程间通信机制&#xff0c;基于开源的 OpenBinder 实现&#xff1b;OpenBinder 起初由 Be Inc. 开发&#xff0c;后由 Plam Inc. 接手。从字面上来解释 Binder 有胶水、粘合剂的意思&#xff0c;顾名思义就是粘和不同的进程&#xff0c;使之实现通信。为什么 Act…

C# Json转对象

第一步&#xff0c;项目添加negut的搜索Newtonsoft.Json&#xff0c;安装第一个&#xff1a;如图所示&#xff1a; 安装以后&#xff0c;自动引用。 private ObservableCollection<Traffic> m_listcls; var json JsonConvert.DeserializeObject<List<Traffic>&…

Dubbo开源

什么是Dubbo? 分布式服务框架 – 远程服务调用 • Ne/y/Mina/Grizzly • RMI/Hessian/WebService – 服务动态发现 • Zookeeper/Redis – 集群软负载均衡 • Random/RoundRobin – 集群失败容错 • Failove…

ionic android 本地存储,ionic2/3本地数据存储storage

ionic2开始storage默认使用的是IndexedDB&#xff0c;而不是LocalStorage存储存储是存储键/值对和JSON对象的简单方法。存储使用下面的各种存储引擎&#xff0c;根据平台选择最佳的存储引擎。当在本机应用程序环境中运行时&#xff0c;Storage将优先使用SQLite&#xff0c;因为…

[Leedcode][JAVA][第470题][Ran7()实现Rand10()]

【问题描述】[Leedcode][JAVA][第470题][Ran7()实现Rand10()] 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数&#xff0c;试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。示例 1:输入: 1 输出: [7] 示例 2:输入: 2 输出: …

时区配置

时区配置 在linux中与时间相关的文件有 /etc/localtime/etc/timezone ##RHEL 7中找不到该文件 其中&#xff0c;/etc/localtime是用来描述本机时间&#xff0c;而 /etc/timezone是用来描述本机所属的时区。 修改本机时区 rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asi…