验证二叉搜索树
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
- 树中节点数目范围在
[1, 10^4]
内 -2^31 <= Node.val <= 2^31 - 1
1. public class TreeNode { 2. int val; 3. TreeNode left; 4. TreeNode right; 5. TreeNode(int x) { 6. val = x; 7. } 8. } 9. class Solution { 10. public boolean isValidBST(TreeNode root) { 11. if (root == null) 12. return true; 13. if (root.left == null && root.right == null) { 14. return true; 15. } 16. if (root.left != null) { 17. TreeNode cur = root.left; 18. while (cur.right != null) { 19. cur = cur.right; 20. } 21. if (cur.val >= root.val) { 22. return false; 23. } 24. } 25. if (root.right != null) { 26. TreeNode cur = root.right; 27. while (cur.left != null) { 28. cur = cur.left; 29. } 30. if (cur.val <= root.val) { 31. return false; 32. } 33. } 34. boolean left = isValidBST(root.left); 35. boolean right = isValidBST(root.right); 36. return left && right; 37. } 38. }