https://leetcode-cn.com/problems/validate-binary-search-tree/
思路:如果我们遍历每个节点然后判断以该节点为根的子树是否符合其实很难判断,因为子树符合了不代表在更大的树中也符合。还是从二叉搜索树的特性出发,我们中序遍历二叉搜索树可以得到升序数组,我只要验证得到的数组是否满足升序条件即可。
tip:我是分开来写了,其实也可以边递归边比较的,分开更清晰些
class Solution {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public boolean isValidBST(TreeNode root) {
List<Integer> list = new ArrayList<>();
midOrder(root, list);
// 判断是否满足升序
for (int i = 1; i < list.size(); i++) {
if (list.get(i) <= list.get(i - 1)) {
return false;
}
}
return true;
}
// 中序遍历
public void midOrder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
midOrder(root.left, list);
list.add(root.val);
midOrder(root.right, list);
}
}