验证二叉搜索树(中等难度)

简介: 验证二叉搜索树(中等难度)

题目概述(中等难度)

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。


有效 二叉搜索树定义如下:


节点的左子树只包含 小于 当前节点的数。

节点的右子树只包含 大于 当前节点的数。

所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

2.png

输入:root = [2,1,3]
输出:true

示例2:

2.png


输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

题目链接:

点我进入leetcode


思路与代码

思路展现

就是采用中序遍历的思路来解就可,我们采用一个list集合将每次中序遍历得到的元素存储到我们的list集合当中,此时需要注意了,如果此时的二叉树是一个二叉搜索树,那么经历过中序遍历后的存入到集合中的元素的值一定是递增的,所以最后只需要判断我们list集合中所存储的值是否是递增的,如果是递增的,返回true,否则返回false.


代码示例

class Solution {
    List<Integer> res = new ArrayList<>();
    public void inorder(TreeNode root) {
        if(root == null) {
            return;
        }
        inorder(root.left);
        res.add(root.val);
        inorder(root.right);
    }
    public boolean isValidBST(TreeNode root) {
        if(root == null) {
            return true;
        }
        inorder(root);
        for(int i = 0;i<res.size()-1;i++) {
            if(res.get(i)>=res.get(i+1)) {
                return false;
            }
        }
        return true;
    }
}

时间复杂度 : O(n),其中 n 为二叉树的节点个数。二叉树的每个节点最多被访问一次,因此时间复杂度为 O(n)。


空间复杂度 : O(n),其中 n 为二叉树的节点个数。最多存储 n 个节点,因此需要额外的 O(n)的空间。


总结

这道题目是对中序遍历一次很好的使用详解,大家可以反复琢磨下.


相关文章
|
6月前
|
机器学习/深度学习 算法 测试技术
【动态规划】【C++算法】1335 工作计划的最低难度
【动态规划】【C++算法】1335 工作计划的最低难度
LeetCode刷题Day16——二叉搜索树(搜索、验证、最小绝对差、众数)
一、二叉搜索树中的搜索 题目链接:700. 二叉搜索树中的搜索
二叉树的完全性检验(中等难度)
二叉树的完全性检验(中等难度)
106 0
二叉树的完全性检验(中等难度)
|
算法 测试技术
全排列Ⅱ(中等难度,加入剪枝操作)
全排列Ⅱ(中等难度,加入剪枝操作)
123 0
全排列Ⅱ(中等难度,加入剪枝操作)
树的子结构(中等难度,好题目)
树的子结构(中等难度,好题目)
94 0
树的子结构(中等难度,好题目)
|
存储 算法
全排列(中等难度)
全排列(中等难度)
77 0
全排列(中等难度)
|
算法
二叉树中和为某一值的路径(中等难度)
二叉树中和为某一值的路径(中等难度)
85 0
二叉树中和为某一值的路径(中等难度)
二叉搜索树的后序遍历序列(中等难度)
二叉搜索树的后序遍历序列(中等难度)
89 0
二叉搜索树的后序遍历序列(中等难度)
二叉搜索树的第k大节点(简单难度)
二叉搜索树的第k大节点(简单难度)
74 0
二叉搜索树的第k大节点(简单难度)
|
算法 测试技术
平衡二叉树(简单难度)
平衡二叉树(简单难度)
100 0
平衡二叉树(简单难度)