zoukankan      html  css  js  c++  java
  • LeetCode 第98题--验证二叉搜索树

    1. 题目

    2.题目分析与思路

    3.代码

    1. 题目

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

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

    节点的左子树只包含小于当前节点的数。
    节点的右子树只包含大于当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。

    2. 思路

      这道题有多重解法,从根源来说,这是一个判断一棵树的中序遍历是不是一个升序。

    2.1 使用递归

    1.使用递归,使用递归的时候有一个坑,就是不能只判断当前值和左子树右子树的大小,而是要比较整棵树的极大值和极小值。

    2.同时还要注意一点,每次递归的时候一定要选好终止位置,每一次我都选的恰好和正确答案错过。。。。。虽然说都能做出来,但是却有简单和复杂的区别。这道题的中止条件就是这个节点是不是空节点,我选的中止条件就是他是否还有子节点

       如果按照我的想法,就要分4种情况讨论,但是按照答案的中止条件,就只有一种情况讨论,复杂程度可想而知。

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isValidBST(self, root: TreeNode,left =float('-inf'),right = float('inf') ) -> bool:
            if not root:
                return True
            if (root.val <= left)or (root.val >= right):
                return False
            else:
                return self.isValidBST(root.left,left,root.val) and self.isValidBST(root.right,root.val,right)

    2.2 使用中序遍历

    这道题使用中序遍历,判断是不是一个升的序列。

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isValidBST(self, root: TreeNode) -> bool:
            list1 = []
            def middlesearch(root1):
                if not root1:
                    pass
                else:
                    middlesearch(root1.left)
                    list1.append(root1.val)
                    middlesearch(root1.right)
            middlesearch(root)
            return list1 == sorted(list1) and len(set(list1)) == len(list1)
  • 相关阅读:
    Libcurl
    Inno Setup教程
    APICloud平台的融云2.0集成
    关于mysql建立索引 复合索引 索引类型
    linux恢复误删除文件-extundelete
    OpenStack QA
    Android之应用程序怎样调用支付宝接口
    NYOJ 22 素数求和问题
    Mycat(5):聊天消息表数据库按月分表实践,平滑扩展
    opencv对图像进行边缘及角点检測
  • 原文地址:https://www.cnblogs.com/tjpeng/p/11644696.html
Copyright © 2011-2022 走看看