JavaLeetCode刷题记录算法提高之LeetCode刷题

LeetCode 98. 验证二叉搜索树

2019-08-21  本文已影响1人  TheKey_

98. 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

示例1:
输入:
    2
   / \
  1   3
输出: true
示例2:
输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

  1. 递归终止条件为当前节点为空
  2. 判断当前节点是否满足二叉树性质(左子树都小于根节点 & 右子树都大于根节点)
  3. 递归判断左右子树是否满足条件
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    private boolean isValidBST(TreeNode root, long minVal, long maxVal) {
        if (root == null) return true;
        if (root.val >= maxVal || root.val <= minVal) return false;
        return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
    }

复杂度分析:

需要使用(中序遍历)LeetCode 94. 二叉树的中序遍历 - 简书

思路: 二叉搜索树中序遍历后的结果一定是从小到达排列的

public boolean isValidBST(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root;
        long res = Long.MIN_VALUE;
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            cur = stack.pop();
            if (cur.val < res) return false;
            else res = cur.val;
            cur = cur.right;
        }
        return true;
    }

复杂度分析:

思路:

  1. 创建 list,递归进行中序遍历,将每个节点的值添加到 list中
  2. 遍历 list, 判断是否是从小到大进行排序的,如果是则一定是二叉搜索树,否则一定不是
public boolean isValidBST(TreeNode root) {
        List<Long> list = new ArrayList<>();
        helper(root, list);
        for (int i = 1; i < list.size(); i++) {
            if (list.get(i) - list.get(i - 1) <= 0) return false;
        }
        return true;
    }

    private void helper(TreeNode root, List<Long> list) {
        if (root == null) return;
        helper(root.left, list);
        list.add((long) root.val);
        helper(root.right, list);
    }

复杂度分析:


上一篇下一篇

猜你喜欢

热点阅读