• 【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
  • 相关阅读:
    错误处理和调试 C++快速入门30
    错误处理和调试 C++快速入门30
    虚继承 C++快速入门29
    多继承 C++快速入门28
    界面设计01 零基础入门学习Delphi42
    鱼C记事本 Delphi经典案例讲解
    界面设计01 零基础入门学习Delphi42
    虚继承 C++快速入门29
    linux系统中iptables防火墙管理工具
    linux系统中逻辑卷快照
  • 原文地址:https://www.cnblogs.com/fuj905/p/12833383.html
Copyright © 2020-2023  润新知