98. 验证二叉搜索树

题目:

思路:

【1】其实可以借鉴 530. 二叉搜索树的最小绝对差(783. 二叉搜索树节点最小距离) 这篇的逻辑,因为二叉搜索树最大的特点就是中序遍历会形成一个升序的数组,所以不满足该升序的就必然不是二叉搜索树。

代码展示:

//时间2 ms 击败 19.15%
//内存42.9 MB 击败 17.64%
/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
        ArrayList<Integer> rootList = new ArrayList<Integer>();
        // 先中序遍历将结果集放入数组集合里面
        inorderTraversal(root,rootList);
        // 遍历辅助空间集合
        for (int i = 1; i < rootList.size(); i++){
           if (rootList.get(i) <= rootList.get(i-1)) return false;
        }
        return true;
    }

    /**
     * 使用中序遍历
     * @param root 树的遍历节点
     * @param rootList 结果集存放的集合
     */
    private void inorderTraversal(TreeNode root , ArrayList rootList) {
        if (root.left != null) inorderTraversal(root.left , rootList);
        rootList.add(root.val);
        if (root.right != null) inorderTraversal(root.right, rootList);
    }
}


//时间0 ms 击败 100%
//内存42.9 MB 击败 13.6%
/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    
    /**
     * 利用中序遍历
     * 有效 二叉搜索树定义如下:
     * 节点的左子树只包含 小于 当前节点的数。
     * 节点的右子树只包含 大于 当前节点的数。
     * 所有左子树和右子树自身必须也是二叉搜索树。
     * @param root 树节点
     * @param lower 左边的节点值
     * @param upper 右边的节点值
     * @return
     */
    private boolean isValidBST(TreeNode root, long lower, long upper) {
        if(null == root){
            return true;
        }
        if(root.val <= lower || root.val >= upper){
            return false;
        }
        return isValidBST(root.left, lower, root.val) && isValidBST(root.right, root.val, upper);
    }
}

 

posted @ 2023-07-07 12:09  忧愁的chafry  阅读(2)  评论(0编辑  收藏  举报