leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
来源:互联网 发布:js模拟小球掉落动画 编辑:程序博客网 时间:2024/05/29 19:38
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 "{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); }}
0 0
- leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
- leetCode 99.Recover Binary Search Tree(修正二叉搜索树) 解题思路和方法
- Leetcode 98. Validate Binary Search Tree 验证二叉搜索树 解题报告
- 【Leecode】207Validate Binary Search Tree有效二叉搜索树
- LeetCode | Validate Binary Search Tree(有效的二叉搜索树)
- [leetcode]Validate Binary Search Tree (判断有效二叉搜索树 C语言实现)
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
- leetCode 96.Unique Binary Search Trees (唯一二叉搜索树) 解题思路和方法
- LeetCode--Validate Binary Search Tree(二叉搜索树)
- 【LeetCode】98. Validate Binary Search Tree 解法,中序遍历,搜索二叉树合法性
- LeetCode 98. Validate Binary Search Tree(校验二叉搜索树)
- Validate Binary Search Tree 有效的二叉查找树
- LeetCode(Validate Binary Search Tree) 判断一个二叉树是否是二叉搜索树
- 判断给定二叉树是否是二叉搜索树(LeetCode: Validate Binary Search Tree)
- [LeetCode]Validate Binary Search Tree, 解题报告
- 【LeetCode】Validate Binary Search Tree 解题报告
- [LeetCode] Validate Binary Search Tree 解题报告
- 【LeetCode】Validate Binary Search Tree 解题报告
- 步步为营(十五)搜索(一)DFS 深度优先搜索
- 11
- Gradle 1:为什么要用Gradle
- Linux 简介和安装
- spring中IOC是什么意思 个人觉得解释的非常有意思
- leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
- Python UnicodeEncodeError: 'gbk' codec can't encode character u'\ufeff' in position 0:
- JFinal是一个什么样的项目?
- propertie文件的使用
- android异常:uncaught exception
- 关于ajax异步提交到后台的jquery应用
- spring中IOC是什么意思 个人觉得解释的非常有意思
- 三维机械设计图形工作站SolidWorks 2014 3D CAD应用方案
- Laravel中URL,ACTION,ROUTE区别