LeetCode 98. Validate Binary Search Tree

原题链接在这里:https://leetcode.com/problems/validate-binary-search-tree/

题目: 

Given a binary tree, determine if it is a valid binary search tree (BST). 

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees. 

题解:

根据BST特性递归调用原函数,如果出现root.val >= max 或者root.val <= min的情况return false. 

Note: 初始的max 和 min 要设成long 型的最大最小值,因为边界的corner case. 若是用Integer.MAX_VALUE. 并且数只有一个节点,刚开始若root.val = Integer.MAX_VALUE, 会返回false. 其实应该返回true.

Time Complexity: O(n). Space: O(logn).

AC Java:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
public class Solution {public boolean isValidBST(TreeNode root) {return isValidHelper(root, Long.MIN_VALUE, Long.MAX_VALUE);}private boolean isValidHelper(TreeNode root, long min, long max){if(root == null){return true;}if(root.val >= max || root.val<= min){return false;}return isValidHelper(root.left, min, root.val) && isValidHelper(root.right, root.val, max);}
}

另外一种方法是做inorder traverse, 若是出现逆序,就返回false.

Time Complexity: O(n). Space: O(logn).

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     TreeNode prev;
12     public boolean isValidBST(TreeNode root) {
13         if(root == null){
14             return true;
15         }
16         //左边
17         if(!isValidBST(root.left)){
18             return false;
19         }
20         //中间
21         if(prev != null && prev.val >= root.val){
22             return false;
23         }
24         prev = root;
25         //右边
26         if(!isValidBST(root.right)){
27             return false;
28         }
29         return true;
30     }
31 }

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/4824973.html

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

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

相关文章

oracle之单行函数之分组函数之课后练习

33. 查询 employees 表中有多少个部门select count(distinct department_id)from employees 34. 查询全公司奖金基数的平均值(没有奖金的人按 0 计算)select avg(nvl(commission_pct, 0))from employees 35. 查询各个部门的平均工资--错误: avg(salary) 返回公司平均工资, 只…

谭浩强c语言规范化的指数形式,C语言程序设计谭浩强第四期末复习重点.docx

1.1.问题分析2.设计算法3.编写程序4.对源程序进行编辑、编译和连接5.运行程序&#xff0c;分析结 6.编写程序文档第一章程 序 设 计 和C 语 言1.1.什么是计算机程序程序&#xff1a;一组计算机能识别和执行的指令。只要让计算机执行这个程序&#xff0c;计算机就会自动地、有条…

OPT和LRU页面置换算法C语言代码,页面置换算法模拟——OPT、FIFO和LRU算法.doc

实用标准文案精彩文档操作系统实验报告页面置换算法模拟——OFT、FIFO和LRU算法班级&#xff1a;2013级软件工程1班学号&#xff1a;X X X姓名&#xff1a;萧氏一郎数据结构说明&#xff1a;Memery[10]物理块中的页码Page[100]页面号引用串Temp[100][10]辅助数组Void print(uns…

使用Enterprise Architecture绘制10种UML画画

UML绘制10种课程要求UML画画&#xff0c;选Enterprise Architecture作为一个绘图工具&#xff0c;每一个草图必须是网上找教程&#xff0c;我觉得很麻烦&#xff0c;还有一些数字并没有找到详细的教程。在我自己找一个绘图方法&#xff0c;今天总结使用Enterprise Architecture…

RocketMQ初步应用架构理论

RocketMQ初步应用架构理论 写给RocketMQ架构应用入门&#xff0c;内容涉及它的设计机理以及推到出来的应用注意事项&#xff0c;入门人员请看。 稍微涉及技术细节&#xff0c;留以我设计中间件时参考&#xff0c;将来整理深度文档时会抽取走&#xff0c;入门人员可以无视。 以下…

android程序的入口点,常见android面试基础题

2015-11-21 06:30:02阅读( 1344 )1. Intent的几种有关Activity启动的方式有哪些&#xff0c;你了解每个含义吗这里Android123提示大家&#xff0c;Intent的一些标记有FLAG_ACTIVITY_BROUGHT_TO_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACT…

转:pysqlite笔记

这是一篇老笔记&#xff0c;原来是放在旧博客上 的&#xff0c;最近因为公司内部一个小东西&#xff0c;想使用简单点的数据库来存储数据&#xff0c;就想起用SQLite来做&#xff0c;上网搜索一些教程。竟然发现&#xff0c;原来一年多前&#xff0c;我也学过一阵 子&#xff0…

android页面布局更改,使用setContentView的方式更换布局文件从而更换界面

使用转换Activity的布局文件的方式&#xff0c;从而达到转换android页面的目的(这里没有使用Intent)&#xff1a;程序很简单&#xff0c;摆一个大概出来&#xff1a;package com.seed.lee.setContentView;import android.app.Activity;import android.os.Bundle;import android…

oracle之单行函数之子查询

--睡得工资比abel高 select last_name,salary from employees where salary>(select salary from employees where last_nameAbel)运行结果 --返回job_id 与141号员工相同 salary比143号多 select last_name,job_id,salary from employees where job_id(select job_id from…

android模拟gps定位软件,gps定位模拟器下载最新版

卫星地图导航&#xff0c;从此出门想去哪里去哪里&#xff0c;再也不用因为不知道路线而烦忧&#xff01;它还能实时定位&#xff0c;快速找人、找车&#xff01;推荐&#xff01;使用前提&#xff1a;1、定位模拟器是基于Xposed安卓框架下的插件&#xff0c;因此安装定位模拟器…

Java的堆与栈,科普给大家

1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C不同&#xff0c;Java自动管理栈和堆&#xff0c;程序员不能直接地设置栈或堆。 2. 栈的优势是&#xff0c;存取速度比堆要快&#xff0c;仅次于直接位于CPU中的寄存器。但缺点是&#xff0c;存在栈中的数据大小与…

android edittext禁止输入特殊字符,Android EditText禁止输入空格和特殊字符

/*** 禁止EditText输入特殊字符* param editText*/public static void setEditTextInhibitInputSpeChat(EditText editText){InputFilter filternew InputFilter() {Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, i…

oracle之单行函数之子查询之课后练习

/*************************************************************************************************/ 40. 谁的工资比 Abel 高?1). 写两条 SQL 语句.SELECT salaryFROM employeesWHERE last_name Abel--返回值为 11000SELECT last_name, salaryFROM employeesWHERE sal…

移动端开发的知识系统介绍

移动端开发1. 移动端适配&#xff1a;http://suqing.iteye.com/blog/1982733http://www.douban.com/note/261319445/ http://www.woshipm.com/ucd/150207.html<meta name"screen-orientation" content"portrait"><!-- 强制竖屏 --><meta na…

delphi android动态权限,DELPHI安卓动态权限申请

DELPHI安卓动态权限申请安卓8.0以前的版本&#xff0c;只需要给静态权限就可以了&#xff0c;但安卓8.0及以后的版本&#xff0c;还需要运行期用代码动态申请权限。下面以《蓝牙权限》为例&#xff0c;其他权限类似。Delphi 10.3 社区版&#xff0c;提供的 Sample 里面有一个例…

oracle之创建和管理表

create table emp2 AS Select employee_id,last_name name,hire_date,salary from employees select * from emp2 --创建表 --白手起家 /* create table emp1(id number(10),name varchar(20),salary number(10,2),hire_date date ) */

LocalBroadcastManager 的使用

一、使用本地广播发送一条广播&#xff08;本例为自己发送自己接收&#xff0c;本地广播也可以是其他应用接收&#xff09;然后接收到广播时回调Receiver类中的回调方法onReceive&#xff08;&#xff09;在此方法中自定义发出通知 代码 1 package com.qf.broadcastreceiver06;…

android xml正方形,使用Android Constraintlayout创建一排均匀分布的正方形

我正在努力创建一个由均匀分布的正方形链组成的布局&#xff0c;这些正方形可以填充可用空间。使用Android Constraintlayout创建一排均匀分布的正方形我到底想要的布局&#xff0c;看起来像这样&#xff1a;的想法是&#xff0c;与不同的宽高比手机这个正方形成长一点点地使用…

oracle之单行函数之子查询课后练习2

1. 查询和Zlotkey相同部门的员工姓名和雇用日期 a) select last_name,hire_date b) from employees c) where department_id ( d) select department_id e) from employees f) where last_name Zlotkey g…

JavaWeb 如何防止表单重复提交 - 使用Token,令牌

JavaWeb 如何防止表单重复提交 - 使用Token&#xff0c;令牌 说到重复提交 &#xff0c;应该想到两种场景&#xff1a;1. 在下单&#xff0c;或者支付 这种情况 那么不允许 刷新&#xff0c;不允许后退再点击提交&#xff08;后退之后提交会失败&#xff0c;修改了也不行&…