摘要:有效二叉搜索樹定義如下節點的左子樹只包含小于當前節點的數。所有左子樹和右子樹自身必須也是二叉搜索樹。而我們二叉搜索樹保證了左子樹的節點的值均小于根節點的值,根節點的值均小于右子樹的值,因此中序遍歷以后得到的序列一定是升序序列。
?作者簡介:大家好,我是車神哥,府學路18號的車神?
?About—>車神:從寢室到實驗室最快3分鐘,最慢3分半(那半分鐘其實是等紅綠燈)
?個人主頁:應無所住而生其心的博客_府學路18號車神_CSDN博客
?點贊?評論?收藏 == 養成習慣(一鍵三連)?
?本系列主要以刷LeetCode(力扣)網站的各類題為標準,實現自我能力的提升為目標?
?希望大家多多支持?~一起加油 ?
- 專欄—>《LeetCode天梯》
其他專欄:
今天項目終于結題了,哇,熬了一晚上的夜,夜都被熬熟了,結題撒花,中午休息了下,下午繼續卷起來呀,小伙伴們一起來。刷題不止,拒絕?內卷,從我做起,哈哈哈,堅持吧!~
每天進步一點點,就已經很棒很棒了,堅持堅持,不要太累,拒絕內卷,從每日一練開始,每天十分鐘,快樂生活一輩子!疫情依舊反復,大家帶好口罩啊~ 繼續繼續,來,今天和車神哥一起來提升自己的Python編程和面試能力吧,刷天梯~
放上我拍的Photo吧!~ 今天喝了 luckin coffee
每日推薦一首歌:ゆうべは俺が悪かった
以下為我的天梯積分規則:
每日至少一題:一題積分+10分
若多做了一題(或多一種方法解答),則當日積分+20分(+10+10)
若做了三道以上,則從第三題開始算+20分(如:做了三道題則積分-10+10+20=40;做了四道題則積分–10+10+20+20=60)
初始分為100分
若差一天沒做題,則扣積分-10分(周六、周日除外注:休息)
堅持!!!
給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜索樹。
有效 二叉搜索樹定義如下:
示例 1:
輸入:root = [2,1,3]
輸出:true
示例2:
輸入:root = [5,1,4,null,null,3,6]
輸出:false
解釋:根節點的值是 5 ,但是右子節點的值是 4 。
提示:
- 樹中節點數目范圍在[1, 10^4] 內
- -2^31 <= Node.val <= 2^31 - 1
分析:
可能由讀者不知道中序遍歷是什么,我們這里簡單提及一下,中序遍歷是二叉樹的一種遍歷方式,它先遍歷左子樹,再遍歷根節點,最后遍歷右子樹。而我們二叉搜索樹保證了左子樹的節點的值均小于根節點的值,根節點的值均小于右子樹的值,因此中序遍歷以后得到的序列一定是升序序列。(引用自了力扣原始解釋,這個解釋很通透!)
class Solution: def isValidBST(self, root: TreeNode) -> bool: if not root: return True prev = None stack = [] while stack or root: while root: stack.append(root) root = root.left root = stack.pop() # 若中序遍歷得到的節點的值小于前一個值prev,那么就說明不是二叉搜索樹,返回False if prev and root.val <= prev.val: return False # 保存上一節點 prev = root root = root.right return True
這個速度超級快,超過100%!!!
思路很不錯!!!多多練習
有大佬分析的很透徹,來看下面的圖
注意6這個節點不光要小于15而且還要大于10,所以這里的每一個節點都是有一個范圍的。這里我們來給每個節點添加一個范圍,如果不在這個范圍之內直接返回false,比如6的范圍是(10,15),很明顯他不在這個范圍內,所以他不是二叉搜索樹。下面方法可能不完全按照上面解釋一致。
class Solution: prev = None # 用于記錄前一個節點 def isValidBST(self, root: TreeNode) -> bool: if not root: return True # 從左開始遞歸 if not self.isValidBST(root.left): return False # 判斷前一節點是否大于當前 if self.prev is not None and self.prev.val >= root.val: return False # 保存前個節點 self.prev = root # 右邊遞歸 if not self.isValidBST(root.right): return False return True
增加上下界的寫法:
class Solution: def isValidBST(self, root: TreeNode) -> bool: # 遞歸并引入上界,下界來判斷是否有效的二叉搜索樹 def chesh(node, min_val = float("-inf"), max_val = float("inf")) -> bool: if not node: return True #每個節點如果超過這個范圍,直接返回false,設置出口 if node.val <= min_val or node.val >= max_val: return False #這里再分別以左右兩個子節點分別判斷 #左子樹范圍的最小值是minVal,最大值是當前節點的值,也就是root的值,因為左子樹的值要比當前節點小 #右子數范圍的最大值是maxVal,最小值是當前節點的值,也就是root的值,因為右子樹的值要比當前節點大 return chesh(node.left, min_val, node.val) and chesh(node.right, node.val, max_val) return chesh(root)
復現大佬的Java代碼。
今天到這吧,加油?
作者:力扣 (LeetCode)
鏈接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnarn7/
來源:力扣(LeetCode)
作者:數據結構和算法
鏈接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnd69e/?discussion=1Pu6Hw
來源:力扣(LeetCode)
今日得分:+10+10+20
總得分:690加油!!!
?堅持讀Paper,堅持做筆記,堅持學習,堅持刷力扣LeetCode?!!!
堅持刷題!!!打天梯!!!
?To Be No.1??哈哈哈哈
?創作不易?,過路能?關注、收藏、點個贊?三連就最好不過了
?( ′???` )
?
『
縱使天光終將熄滅,我們也要歌頌太陽。
』
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124788.html
摘要:先實現棧操作遍歷鏈表,把每個節點都進中然后再遍歷鏈表,同時節點依次出棧,二者進行比較。 ?作者簡介:大家好,我是車神哥,府學路18號的車神? ?個人主頁:應無...
摘要:根據這個特征,用二分法來將有序數組轉換為一顆二叉搜索樹。邊界條件向下取整得到中間值遞歸二分法接下來我們驗證下一棵樹是否滿足二叉搜索樹。二驗證二叉搜索樹相關題目驗證二叉搜索樹中等思路就是,中序遍歷如果滿足遞增的就行。 二叉樹大家都知道,二叉搜索樹滿足以下特征: 節點的左子樹只包含小于當前節點的數節點的右子樹只包含大于當前節點的數 所有左子樹和右子樹自身必須也是二叉搜索樹 二叉搜索樹也叫...
摘要:小鹿題目驗證二叉搜索樹給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。假設一個二叉搜索樹具有如下特征節點的左子樹只包含小于當前節點的數。所有左子樹和右子樹自身必須也是二叉搜索樹。算法思路定義全局的變量,用來返回是否為二叉搜索樹。 Time:2019/4/24Title: Vaildata Binary Search TreeDifficulty: MediumAuthor: 小鹿 ...
閱讀 2648·2021-11-24 09:39
閱讀 1648·2021-11-24 09:38
閱讀 629·2021-11-22 14:44
閱讀 1888·2021-11-18 10:02
閱讀 2572·2021-11-18 10:02
閱讀 1158·2021-10-14 09:43
閱讀 4243·2021-09-29 09:35
閱讀 523·2021-07-30 15:30