Leetcode 98.验证二叉搜索树
题目要求
示例 1:

输入:root = [2,1,3]
输出:true
示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
中序遍历
中序遍历二叉树并存入到list中,判断list中元素是否升序排列
是的话返回true,否则返回false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
class Solution { public boolean isValidBST(TreeNode root) { ArrayList<Integer> list = new ArrayList<>(); inOrder(root, list); for (int i = 0; i < list.size() - 1; i++) { if (list.get(i) >= list.get(i + 1)) { return false; } } return true; } public void inOrder(TreeNode root, ArrayList<Integer> inorder) { if (root == null) return; inOrder(root.left, inorder); inorder.add(root.val); inOrder(root.right, inorder); } }
|
简洁实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public boolean isValidBST(TreeNode root) { return validBST(Long.MIN_VALUE, Long.MAX_VALUE, root); } boolean validBST(long lower, long upper, TreeNode root) { if (root == null) return true; if (root.val <= lower || root.val >= upper) return false; return validBST(lower, root.val, root.left) && validBST(root.val, upper, root.right); } }
class Solution { private long prev = Long.MIN_VALUE; public boolean isValidBST(TreeNode root) { if (root == null) { return true; } if (!isValidBST(root.left)) { return false; } if (root.val <= prev) { return false; } prev = root.val; return isValidBST(root.right); } }
|