Algorithm/src/main/java/tree/IsValidBST.java

53 lines
1.6 KiB
Java
Raw Normal View History

2025-03-18 12:34:17 +08:00
package tree;
2025-03-24 18:58:37 +08:00
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
2025-03-18 12:34:17 +08:00
/**
* 题目 98. 验证二叉搜索树 (isValidBST)
* 描述给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树
* 有效 二叉搜索树定义如下
* 节点的左子树只包含 小于 当前节点的数
* 节点的右子树只包含 大于 当前节点的数
* 所有左子树和右子树自身必须也是二叉搜索树
* 链接https://leetcode.cn/problems/validate-binary-search-tree/
*/
public class IsValidBST {
2025-03-24 18:58:37 +08:00
//递归
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,List<Integer>list){
if(root!=null){
dfs(root.left,list);
list.add(root.val);
dfs(root.right,list);
}
}
2025-03-18 12:34:17 +08:00
public boolean isValidBST(TreeNode root) {
2025-03-24 18:58:37 +08:00
List<Integer> 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;
2025-03-18 12:34:17 +08:00
}
}