98. 验证二叉搜索树

image.png

递归解法一

  1. public class Solution {
  2. // 存放中序遍历结果,二分搜索树中序遍历的结果是从小往大排序的
  3. List<Integer> list = new ArrayList<>();
  4. public boolean isValidBST(TreeNode root) {
  5. if (root!= null) {
  6. isValidBST(root.left);
  7. list.add(root.val);
  8. isValidBST(root.right);
  9. }
  10. // 注意要小于等于,搜索树里不能有相同元素
  11. for (int i = 1; i < list.size(); i++) {
  12. if (list.get(i - 1) >= list.get(i)) return false;
  13. }
  14. return true;
  15. }
  16. }

递归解法二,代码结构更清晰

  1. class Solution {
  2. private ArrayList<Integer> tempList = new ArrayList<>();
  3. public boolean isValidBST(TreeNode root) {
  4. preOrder(root);
  5. for (int i = 1; i < tempList.size(); i++) {
  6. if (tempList.get(i - 1) >= tempList.get(i)) return false;
  7. }
  8. return true;
  9. }
  10. public void preOrder(TreeNode node) {
  11. if (node != null) {
  12. preOrder(node.left);
  13. tempList.add(node.val);
  14. preOrder(node.right);
  15. }
  16. }
  17. }