博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证二叉搜索树
阅读量:3959 次
发布时间:2019-05-24

本文共 1373 字,大约阅读时间需要 4 分钟。

题目来源

题目描述

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
在这里插入图片描述

解答一(递归)

在这里插入图片描述

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

解答二(中序遍历)

基于方法一中提及的性质,我们可以进一步知道二叉搜索树「中序遍历」得到的值构成的序列一定是升序的,这启示我们在中序遍历的时候实时检查当前节点的值是否大于前一个中序遍历到的节点的值即可。如果均大于说明这个序列是升序的,整棵树是二叉搜索树,否则不是.

class Solution {
public boolean isValidBST(TreeNode root) {
Deque
stack=new LinkedList<>(); double inorder=-Double. MAX_VALUE; while(!stack.isEmpty()||root!=null){
while(root!=null){
stack.push(root); root=root.left; } root=stack.pop(); if(root.val<=inorder){
return false; } inorder=root.val; root=root.right; } return true; }}

转载地址:http://jnlzi.baihongyu.com/

你可能感兴趣的文章
java除去字符串空格
查看>>
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>
Word生成目录
查看>>
JSP彩色验证码源程序编写
查看>>
java操作Excel、PDF文件
查看>>
java 获得系统变量
查看>>
window.event对象用法讲解
查看>>
jive license保护原理
查看>>
java des加密
查看>>
struts&hibernate&spring例子
查看>>
inno使用教程
查看>>
网吧系统母盘制作(系统分区整体考虑优化配置篇)
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
Quartz 使用手记 --转
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
MySQL用户授权
查看>>