zoukankan      html  css  js  c++  java
  • 【leetcode】98 验证二叉搜索树

    20200505每日一题

    题目描述

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

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

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

    分析

    1.递归

    直接递归判断左右子树的val是否在一个范围内

    根节点范围确定为负无穷到正无穷

    左子树范围为负无穷到根节点

    右子树范围为根节点到正无穷

    2.结合中序遍历

    若把二叉树中序遍历存为一个列表,则每一个val均大于前一个val

    注意是大于,临界值等于不可!

    解题

    1.

    
    
    # 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: def digui(node, lower, upper): if not node: return True mid = node.val if not lower < mid < upper: return False return digui(node.left,lower,mid) and digui(node.right,mid,upper) return digui(root,float('-inf'),float('inf'))

     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:
            mid=[]
            def mid_trav(node):
                if not node:
                    return True
                if node.left:
                    mid_trav(node.left)
                mid.append(node.val)
                if node.right:
                    mid_trav(node.right)
            mid_trav(root)
            if(mid == sorted(mid) and len(set(mid)) == len(mid)):
                return True
            else:
                return False
  • 相关阅读:
    使用T4模板生成POCO类
    MiniProfiler工具介绍
    程序集和反射(C#)
    按自己的想法去理解事件和泛型(C#)
    WebAPI性能优化之压缩解压
    那些年困扰我们的委托(C#)
    HTML5笔记2——HTML5音/视频标签详解
    HTML5笔记1——HTML5的发展史及标签的改变
    工作中常用的js、jquery自定义扩展函数代码片段
    记一次.NET代码重构
  • 原文地址:https://www.cnblogs.com/fuj905/p/12833383.html
Copyright © 2011-2022 走看看