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
  • 相关阅读:
    欠拟合与过拟合概念和局部加权回归
    ActionEvent之TextField
    事件模型的介绍与Button的ActionListener
    布局管理器
    GUI初步和frame&panel
    生产者消费者问题
    线程同步
    [BZOJ 1407] Savage
    [BZOJ 1145] 图腾totem
    [BZOJ 1150] 数据备份
  • 原文地址:https://www.cnblogs.com/fuj905/p/12833383.html
Copyright © 2011-2022 走看看