博客
关于我
LeetCode - 98. 验证二叉搜索树(迭代、递归)2
阅读量:353 次
发布时间:2019-03-04

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

题目:

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

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。

节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:

2	   / \	  1   3

输出: true

示例 2:

输入:

5   / \  1   4  	 / \    3   6

输出: false

解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。

在这里插入图片描述

在这里插入图片描述
方法一: 递归

public boolean isValidBST(TreeNode root){           return recurse(root,null,null);    }    public boolean recurse(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 (!recurse(node.right,val,upper))return false;        //将当前节点的值替换为上界,继续检查左边的子节点        if (!recurse(node.left,lower,val))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(); // 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树 if (root.val <= inorder) { return false; } inorder = root.val; root = root.right; } return true; }}

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

你可能感兴趣的文章
android GPS JAVA 获取GPS功能是否禁用
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
Linux下安装MySql过程
查看>>
原生vue实现VantUI中IndexBar索引导航栏功能
查看>>
解决:android TextView上响应部分文字的事件
查看>>
android:使用audiotrack 类播放wav文件
查看>>
vue通过better-scroll 封装自定义的下拉刷新组件
查看>>
android解决:使用多线程和Handler同步更新UI
查看>>
vue自定义封装Loading组件
查看>>
解决移动端项目中苹果ios和安卓android手机点击输入框网页页面自动放大缩小
查看>>
Element UI 中动态路由的分析及实现
查看>>
使用springMVC配置视图管理器后找不到指定的页面
查看>>
关于js中对于Promise的深入理解
查看>>
对于js中的this指向的深入理解
查看>>
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
查看>>
十大排序算法之三:插入排序(Python)
查看>>
利用Python实现循环队列
查看>>
十大排序算法之四:希尔排序(Python)
查看>>
利用递归实现二叉树的前中后序遍历(Python)
查看>>
A*寻路算法(Python)
查看>>