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:
         
         #创建一个空数组
        inorder =[]
        def help( root):
            nonlocal inorder
            # 1. 基线条件:如果当前节点为空,直接返回,什么也不做
            if root  is None:
                return
            # 2. 递归遍历左子树
            help(root.left)
            # 3. 处理(访问)根节点:将根节点的值添加到结果列表中
            #    这一步在中序遍历中位于左右子树递归之间
            inorder.append(root.val)
            # 4. 递归遍历右子树
            help(root.right)
            return 
        help(root)
        for i in range(0,len(inorder)-1): # i和i+1 进行比较, 所以i到倒数第二就可以了。 list [0,len-1] range [0: len)
            if inorder[i+1]<= inorder[i]:
                return False
        return True 

不用创建数组,只看当前节点和前一个节点的大小 

def isValidBST0(self, root: Optional[TreeNode]) -> bool:
         
         #创建一个空数组
        pre_node =float('-inf')
        def help( root):
            nonlocal pre_node
            # 1. 基线条件:如果当前节点为空,直接返回,什么也不做
            if root  is None:
                return True 
            # 2. 递归遍历左子树
            if not help(root.left):
                return  False
            # 3. 处理(访问)根节点:将根节点的值添加到结果列表中
            #    这一步在中序遍历中位于左右子树递归之间
            if pre_node >= root.val :
                return False
            pre_node=root.val
            # 4. 递归遍历右子树
            if not help(root.right):
                return False
            return True 
        return help(root)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值