Leetcode 98. Validate Binary Search Tree
2017-09-04 09:16
555 查看
Leetcode 98. Validate Binary Search Tree
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 3
Binary tree
[2,1,3], return true.
Example 2:
1
/ \
2 3
Binary tree
[1,2,3], return false.
思路:
判断一棵树是不是BST,有两种方法:
第一种方法:通过BST的性质(左 < 根 <右)递归左子树和右子树判断。
第二种方法:中序遍历二叉树,如果得到的序列是从小到大的,那么就是BST。
首先来看看第一种方法的代码:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isValidBST(TreeNode root) { long min = Long.MIN_VALUE; // 此处用Long,一开始我用的是Integer long max = Long.MAX_VALUE; return isValid(root, min, max); } public boolean isValid(TreeNode root, long min, long max) { if(root == null) { return true; } if(root.val <= min || root.val >= max) { return false; } return isValid(root.left, min, root.val) && isValid(root.right, root.val, max); } }
Leetcode太有诚意了,会测试边界用例,比如这样的测试用例:【2147483647】,刚好是Integer的最大值。在我写程序的时候,确实没有考虑到这种特殊的情况。
看到Discuss中,有人把Integer改为Long,确实通过了所有用例,但是如果测试用例是【9223372036854775807】呢,刚好是Long的最大值。所以还是第二种方法稳妥些。
下面看看第二种方法:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isValidBST(TreeNode root) { boolean result = true; ArrayList<Integer> list = inOrder(root); // 中序遍历 for(int i = 0; i < list.size() - 1; i++) { if(list.get(i) >= list.get(i+1) ) { // 中序遍历的结果应该是升序的 result = false; break; } } return result; } // 中序遍历 public ArrayList<Integer> inOrder(TreeNode root) { ArrayList<Integer> result = new ArrayList(); Stack<TreeNode> stack = new Stack(); while(root != null || !stack.isEmpty()) { while(root != null) { stack.push(root); root = root.left; } root = stack.pop(); result.add(root.val); root = root.right; } return result; } }
有关二叉树的中序遍历,参考:
http://blog.csdn.net/u010429424/article/details/77778254
注:学渣心里苦,不要学楼主,平时不努力,考试二百五,哭 ~
相关文章推荐
- leetcode-98. Validate Binary Search Tree
- LeetCode 98. Validate Binary Search Tree
- leetcode - 98.Validate Binary Search Tree
- leetcode 98. Validate Binary Search Tree
- leetcode 题解 98. Validate Binary Search Tree
- LeetCode --- 98. Validate Binary Search Tree
- [LeetCode] 98. Validate Binary Search Tree
- [Leetcode] 98. Validate Binary Search Tree
- leetcode-java-98. Validate Binary Search Tree
- Leetcode 98. Validate Binary Search Tree
- LeetCode 98. Validate Binary Search Tree
- LeetCode - 98. Validate Binary Search Tree
- leetcode 98. Validate Binary Search Tree
- 【LeetCode】98. Validate Binary Search Tree
- Leetcode 98. Validate Binary Search Tree
- Leetcode 98. Validate Binary Search Tree
- [LeetCode]98. Validate Binary Search Tree
- leetcode: 98. Validate Binary Search Tree
- Leetcode 98. Validate Binary Search Tree
- [Leetcode] 98. Validate Binary Search Tree @python