博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode98. Validate Binary Search Tree
阅读量:6233 次
发布时间:2019-06-22

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

题目要求

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.Example 1:    2   / \  1   3Binary tree [2,1,3], return true.Example 2:    1   / \  2   3Binary tree [1,2,3], return false.

判断一个树是否是二叉查找树。二叉查找树即满足当前节点左子树的值均小于当前节点的值,右子树的值均大于当前节点的值。

思路一:stack dfs

可以看到,对二叉查找树的中序遍历结果应当是一个递增的数组。这里我们用堆栈的方式实现中序遍历。

public boolean isValidBST(TreeNode root) {        long currentVal = Long.MIN_VALUE;        LinkedList
stack = new LinkedList
(); while(root!=null || !stack.isEmpty()){ while(root!=null){ stack.push(root); root = root.left; } root = stack.pop(); if(root.val<=currentVal) return false; currentVal = root.val; root = root.right; } return true; }

思路二:递归

我们可以发现,如果已知当前节点的值val以及取值的上下限upper,lower,那么左子节点的取值范围就是(lower, val),右子节点的取值范围就是(val, upper)。由此出发递归判断,时间复杂度为O(n)因为每个节点只需要遍历一次。

public boolean isValidBST2(TreeNode root){        return isValid(root, Long.MIN_VALUE, Long.MAX_VALUE);    }        public boolean isValid(TreeNode treeNode, long lowerBound, long upperBound){        if(treeNode==null) return true;        if(treeNode.val>=upperBound || treeNode.val<=lowerBound) return false;        return isValid(treeNode.left, lowerBound,treeNode.val) && isValid(treeNode.right, treeNode.val, upperBound);    }

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

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

你可能感兴趣的文章
【读书笔记】测试驱动开发(中文版)
查看>>
ExtAspNet v3.0.1
查看>>
javascript 构造函数和方法
查看>>
使用VB.net Express 2010开发AutoCAD.net插件调试时出现很多错误的解决办法
查看>>
.net服务使用笔记(原创)
查看>>
使用Tomcat配置域名
查看>>
[转]Oracle/Altibase数据库中Sequence的用法
查看>>
URAL 1009 K-based Numbers
查看>>
android 知识点汇总
查看>>
android之Notification通知
查看>>
C# 生成等比缩略图的类
查看>>
安利 : プログラミングで彼女をつくる 全攻略~
查看>>
1022. Digital Library (30)
查看>>
Canvas入门(2):图形渐变和图像形变换
查看>>
DataAccess通用数据库访问类,简单易用,功能强悍
查看>>
启动MYSQL密码审计插件
查看>>
spring的事务操作
查看>>
Extensions for Spatial Data
查看>>
Hadoop HDFS 用户指南
查看>>
primefaces 查询 点击按钮 加载 动画 ajax loader
查看>>