搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨
csdn:https://blog.csdn.net/baidu_31657889/
csdn:https://blog.csdn.net/abcgkj/
github:https://github.com/aimi-cn/AILearnersnode
這是由LeetCode官方推出的的經典面試題目清單~
這個模塊對應的是探索的初級算法~旨在幫助入門算法。咱們第一遍刷的是leetcode推薦的題目。
查看完整的劍指Offer算法題解析請點擊github連接:
github地址python
給定一個二叉樹,判斷其是不是一個有效的二叉搜索樹。git
假設一個二叉搜索樹具備以下特徵: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 發佈!