博客
关于我
LeetCode - 98. 验证二叉搜索树(迭代、递归)2
阅读量:352 次
发布时间: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/

你可能感兴趣的文章
JVM 参数默认值查询
查看>>
异常的继承结构
查看>>
SVN 和 Git 区别
查看>>
JDK 内置的多线程协作工具类的使用场景
查看>>
redis 单线程为什么快
查看>>
Java 源代码到运行的过程
查看>>
Java 中哪些对象可以获取类对象
查看>>
linux 的 cp 命令如何复制不提示覆盖
查看>>
缓存穿透 / 缓存击穿 / 缓存雪崩 / 缓存一致性
查看>>
linux 的 pwd 命令
查看>>
linux 的 sleep 命令
查看>>
js 的 let var const 区别
查看>>
无线掌上B超USONIX-R6线阵B模图像初步
查看>>
无线掌上B超USONIX-R6凸阵B模图像初步
查看>>
react路由使用以及封装
查看>>
vue计算属性和监听器区别
查看>>
前端常用知识随手记
查看>>
react-redux使用hooks替代connect
查看>>
使用 FileUpload 实现文件上传
查看>>
11.2.6 时间值的小数秒
查看>>