p98

LeetCode p98 Validate Binary Search Tree 题解

1.题目:

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.

题意:

输入一二叉树,判断它是否为二叉搜索树。

2.解题思路:

见代码。

3.代码


[title] [] [url] [link text]
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
 
/**
* 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;

return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE); //Int会被卡数
}

public boolean isValidBST(TreeNode root, Long min, Long max) {
if (root == null)
return true;
if (root.val <= min || root.val >= max)
return false;
boolean b1 = root.left == null
|| (root.left != null && root.left.val < root.val);
boolean b2 = root.right == null
|| (root.right != null && root.right.val > root.val);
if (b1 && b2) {
return isValidBST(root.left, min, (long) root.val)
&& isValidBST(root.right, (long) root.val, max);
}
return false;
}
}

4.一些总结: