写点什么

手撸二叉树之验证二叉搜索树

发布于: 4 小时前
手撸二叉树之验证二叉搜索树

Hello, 大家好,今天是我参加 9 月更文的第 9 天,今天给大家带来的关于二叉树相关的算法题是二叉树的左叶子之和,正文如下:


题目

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


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


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

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

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


示例 1:



示例 2:


解题思路

我们知道二叉搜索树的特性就是,中序遍历后得到的是一个有序的数组,所以我们可以通过在中序遍历的时候检查当前节点的值是否大于前一个中序遍历的值,如果均大于说明这个序列是升序的,整棵树是二叉搜索树,否则不是。

代码实现

/** * 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 long pre = Long.MIN_VALUE;    public boolean isValidBST(TreeNode root) {        if (root == null) {            return true;        }
if (!isValidBST(root.left)){ return false; } if (root.val <= pre) { return false; } pre = root.val; return isValidBST(root.right); }}
复制代码

最后

复杂度分析:


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

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

发布于: 4 小时前阅读数: 5
用户头像

佛系编码 2019.05.13 加入

红鲤鱼与绿鲤鱼与驴。

评论

发布
暂无评论
手撸二叉树之验证二叉搜索树