文章目录
- 题目
- 方法一:BFS 层序遍历
- 方法二:
题目
方法一:BFS 层序遍历
利用层序遍历 拿到每一个节点 并且给每一个结点配备一个最大值和最小值的队列
只要节点在最大值和最小值之间就满足二叉搜索树的条件
public boolean isValidBST(TreeNode root) {
if(root == null) return true;
Queue<TreeNode> queue = new LinkedList<>();
Queue<Integer> minValues = new LinkedList<>();//定义两个队列来记录每一个节点的最大值和最小值情况
Queue<Integer> maxValues = new LinkedList<>();
queue.offer(root);
minValues.offer(null); // 初始最小值为null
maxValues.offer(null); // 初始最大值为null
while(!queue.isEmpty()){
int count = queue.size();
for(int i = 0 ; i < count ; i++){
TreeNode node = queue.poll();
Integer minValue = minValues.poll();//弹出该对比节点的最大值和最小值情况 节点值必须在这个区间内才满足条件
Integer maxValue = maxValues.poll();
if ((minValue != null && node.val <= minValue) || (maxValue != null && node.val >= maxValue)) {
return false;
}
if(node.left != null){
queue.offer(node.left);
minValues.offer(minValue);// 左子树的最小值沿用上一次的最小值
maxValues.offer(node.val); // 左子树的最大值为当前节点值
}
if(node.right != null){
queue.offer(node.right);
minValues.offer(node.val); // 右子树的最小值为当前节点值
maxValues.offer(maxValue); // 右子树的最大值沿用上一次的最大值
}
}
}
return true;
}