文章目录
- 题目
- 方法一: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); // 初始最小值为nullmaxValues.offer(null); // 初始最大值为nullwhile(!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;}