【力扣100】98.验证二叉搜索树

添加链接描述

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        # 思路是把这棵树中序遍历一遍,看是否是升序数组
        def myfunc(root,res):
            if not root:
                return None
            myfunc(root.left,res)
            res.append(root.val)
            myfunc(root.right,res)
        
        treeToarray=[]
        myfunc(root,treeToarray)
        # 判断一个数组是不是升序,从前往后遍历数组,相减,如果有正数,说明这个数组不是升序
        i=0
        while i<len(treeToarray)-1:
            treeToarray[i]=treeToarray[i]-treeToarray[i+1]
            if treeToarray[i]>=0:
                return False
            i=i+1
        return True

思路:

  1. 从二叉搜索树的来源思考本题:二叉搜索树就是来自一个有序数组,从中间来一个入口,这样就使用二分法加快查找效率
    在这里插入图片描述

  2. 这样还不够快,那么为什么不再对左右两个数组进行二分呢,所以就有了下图:
    在这里插入图片描述

  3. 把中间这个4节点拎起来,就是一颗二叉搜索树

  4. 那么这道题就是使用了逆方法:二叉搜索树的中序遍历是一个升序数组

  5. 然后为了不增加复杂度,在原数组上前减后,如果有正数,说明这个数组不是升序数组

相关推荐

  1. 98. 验证搜索

    2023-12-23 00:16:01       36 阅读
  2. :98. 验证搜索

    2023-12-23 00:16:01       33 阅读
  3. 98:验证搜索

    2023-12-23 00:16:01       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 00:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 00:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 00:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 00:16:01       20 阅读

热门阅读

  1. 计算相对差异的Boost.Math库的测试程序

    2023-12-23 00:16:01       39 阅读
  2. C++学习笔记(十七)

    2023-12-23 00:16:01       31 阅读
  3. Copula-Variational-Bayes 元高斯分析法的 MATLAB 仿真

    2023-12-23 00:16:01       34 阅读
  4. 深入理解 Union 和 Union All 的区别及优化技巧

    2023-12-23 00:16:01       43 阅读
  5. Unity-时间

    2023-12-23 00:16:01       41 阅读
  6. etcd是什么

    2023-12-23 00:16:01       37 阅读
  7. NLP中的嵌入层

    2023-12-23 00:16:01       40 阅读
  8. 控制中存在的一些问题(注意事项)

    2023-12-23 00:16:01       30 阅读