搜索微信公衆號:'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 發佈!