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:
Input: 2 / 1 3 Output: true
Example 2:
5 / 1 4 / 3 6 Output: false Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value is 5 but its right child's value is 4.
中序遍历的结果是一个递增的序列,时间复杂度为O(n)
class Solution {//树 中序遍历 递归 mytip private TreeNode pre = null; public boolean isValidBST(TreeNode root) { return isValid(root); } private boolean isValid(TreeNode root){ if(null==root){ return true; } if (!isValid(root.left)||(pre!=null&&root.val<=pre.val)){//注意一定是<= return false; } pre = root; return isValid(root.right); } }
时间复杂度为O(n)
class Solution {//树 递归 mytip public boolean isValidBST(TreeNode root) { long max = Long.MAX_VALUE;//Integer.MAX_VALUE不可以,要扩大范围 long min = Long.MIN_VALUE; return isValid(root,min,max); } private boolean isValid(TreeNode root,long min,long max){ if(null==root){ return true; } if(root.val<=min||root.val>=max){ return false; } return isValid(root.left,min,root.val)&&isValid(root.right,root.val,max); } }