LeetCode初级算法--树02:验证二叉搜索树

LeetCode初级算法--树02:验证二叉搜索树

搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货node

csdn:https://blog.csdn.net/baidu_31657889/python

csdn:https://blog.csdn.net/abcgkj/git

github:https://github.com/aimi-cn/AILearnersgithub

1、引子

这是由LeetCode官方推出的的经典面试题目清单~
这个模块对应的是探索的初级算法~旨在帮助入门算法。咱们第一遍刷的是leetcode推荐的题目。
查看完整的剑指Offer算法题解析请点击github连接:
github地址面试

2、题目

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

假设一个二叉搜索树具备以下特征:编程

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

示例1:微信

输入:
    2
   / \
  1   3
输出: true复制代码

示例2:机器学习

输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,可是其右子节点值为 4 。复制代码

一、思路

  • 为了验证一棵树是不是BST,咱们能够一个节点一个节点的查看。
  • 每个节点都有一个最大值和最小值的范围。
  • 哎?为何一个节点有一个最大值和最小值的范围?
  • 咱们举个例子。
5
   / \
  1   8
     / \
    3   10复制代码

在上述的树当中,1比5小,8比5大,第一层OK再第二层,3比8小,10比8大,OK....OK吗?不OK!由于3在5的右子树,应当比5大。因此不能够直观地认为一个节点只要比父节点大或者小就能够了,它其实是由大小范围的。对于这个3,它应该的范围就是(5,8)。最大值和最小值怎么更新呢?很简单,若是要检查的节点在这个节点的左边,那么最大值就是这个节点的值,最小值就是上一轮检查当中的最小值。反之亦然。学习

二、编程实现

python

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    # 初始化root的时候,它没有最大最小的限制
    def isValidBST(self, root: TreeNode, low = float('-inf'), high = float('inf')) -> bool:
        # 当这个节点不存在的时候,就返回True。就表明父节点没有(左或右)孩子
        if not root:return True
        # 判断当前节点是否大于最小值和小于最大值
        if not low<root.val<high:return False
        # 递归检查左右孩子,两个都为True才能够返回True
        return self.isValidBST(root.left,low,root.val) and self.isValidBST(root.right,root.val,high)复制代码

AIMI-CN AI学习交流群【1015286623】 获取更多AI资料

分享技术,乐享生活:咱们的公众号计算机视觉这件小事每周推送“AI”系列资讯类文章,欢迎您的关注!

本文由博客一文多发平台 OpenWrite 发布!

相关文章
相关标签/搜索