leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
2015-07-30 16:49
766 查看
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.
confused what
read more on how binary tree is serialized on OJ.
思路:判断是否二叉搜索树,按照定义判断即可,比较简单。
代码如下:
另一种比较简洁的代码方式:
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.
confused what
"{1,#,2,3}"means? >
read more on how binary tree is serialized on OJ.
思路:判断是否二叉搜索树,按照定义判断即可,比较简单。
代码如下:
/** * 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) { if(root == null){ return true; } //判断左子树的值是否全比根小,右子树是否全比根大,不是则返回false if(!isLessThan(root, root.left) || !isGreaterThan(root, root.right)){ return false; } //如果左右子树均为空,为真 boolean temp = true; //判断左子树 if(root.left != null){ if(root.val > root.left.val){ temp = isValidBST(root.left); }else{ temp = false; } } //如果左子树成立,判断右右子树 if(temp && root.right != null){ if(root.right.val > root.val){ temp = isValidBST(root.right); }else{ temp = false; } } return temp; } /** * 判断左子树是否全比根节点小 * @param root * @param left * @return */ private boolean isLessThan(TreeNode root, TreeNode left){ if(left == null){ return true; } boolean temp = false; if(left.val < root.val){ temp = isLessThan(root, left.left) && isLessThan(root, left.right); } return temp; } /** * 判断右子树全比根节点大 * @param root * @param right * @return */ private boolean isGreaterThan(TreeNode root, TreeNode right){ if(right == null){ return true; } boolean temp = false; if(right.val > root.val){ temp = isGreaterThan(root, right.left) && isGreaterThan(root, right.right); } return temp; } }
另一种比较简洁的代码方式:
/** * 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) { if(root == null){ return true; } //用long是因为要考虑Integer.MIn和Max的冲突 return check(root, Long.MIN_VALUE, Long.MAX_VALUE); } /** * 判断根节点的是否在左右届中间 * 是则继续递归判断左右,不是则返回false */ private boolean check(TreeNode root, long l, long r){ if(root == null) return true; return root.val > l && root.val < r && check(root.left,l,root.val) && check(root.right, root.val, r); } }
相关文章推荐
- JAVA JDBC
- Oracle 学习之RMAN(一)架构
- Android 通过应用程序来设置系统的日期和时间中的
- Linq/EF/lambda Group by/Order by 多个字段详细用法
- caffe安装中opencv的各种库问题
- 关于Apple设备私有的apple-touch-icon属性详解
- 写过的一些shell脚本总结
- Nginx 战斗准备 —— 优化指南
- spring中IOC是什么意思 个人觉得解释的非常有意思
- Java IO操作总结
- 【Oracle】Oracle如何实现创建数据库、备份数据库及数据导出导入
- 游戏服务端架构发展史
- SSH中的jar包讲解(摘自csdn)
- storm 的三种计算语义
- 【剑指Offer面试题】 九度OJ1519:合并两个排序的链表
- 由Java代码运行shell命令/脚本
- C#System.Net.Mail采用简单邮件传输协议发送邮件
- android的数据与访问(2)-delphi xe7如何存取我的app配置参数文件?
- windows和linux平台下的通用时间测试函数
- holeview