题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入: 2 / \ 1 3 输出: true
示例 2:
输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。
解题思路
遍历树中的每个节点,每个节点的值都有上下界;如果符合上下界,就继续深入;
public class Solution098 {
private class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public boolean isValidBST(TreeNode root) {
return dfs(root,Integer.MIN_VALUE-1,Integer.MAX_VALUE+1);
}
//
private boolean dfs(TreeNode node, Integer min, Integer max) {
if (node == null) {
return true;
}
if (node.val <= min || node.val >= max) {
return false;
}
if (dfs(node.left, min, node.val) && dfs(node.right, node.val, max)) {
return true;
}
return false;
}
}