搜索微信公众号:'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
这是由LeetCode官方推出的的经典面试题目清单~
这个模块对应的是探索的初级算法~旨在帮助入门算法。咱们第一遍刷的是leetcode推荐的题目。
查看完整的剑指Offer算法题解析请点击github连接:
github地址面试
给定一个二叉树,判断其是不是一个有效的二叉搜索树。算法
假设一个二叉搜索树具备以下特征:编程
示例1:微信
输入:
2
/ \
1 3
输出: true复制代码
示例2:机器学习
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,可是其右子节点值为 4 。复制代码
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 发布!