package tree; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 题目: 98. 验证二叉搜索树 (isValidBST) * 描述:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 * 有效 二叉搜索树定义如下: * 节点的左子树只包含 小于 当前节点的数。 * 节点的右子树只包含 大于 当前节点的数。 * 所有左子树和右子树自身必须也是二叉搜索树。 * 链接:https://leetcode.cn/problems/validate-binary-search-tree/ */ public class IsValidBST { //递归 public boolean helper(TreeNode node, long lower, long upper) { if (node == null) { return true; } if (node.val <= lower || node.val >= upper) { return false; } return helper(node.left, lower, node.val) && helper(node.right, node.val, upper); } public boolean isValidBST2(TreeNode root) { return helper(root, Long.MIN_VALUE, Long.MAX_VALUE); } //中序遍历 public void dfs(TreeNode root,Listlist){ if(root!=null){ dfs(root.left,list); list.add(root.val); dfs(root.right,list); } } public boolean isValidBST(TreeNode root) { List list = new ArrayList<>(); dfs(root, list); // 检查中序遍历结果是否严格递增 for (int i = 1; i < list.size(); i++) { if (list.get(i) <= list.get(i - 1)) { return false; } } return true; } }