力扣98題(二叉搜尋樹,遞迴)
阿新 • • 發佈:2021-01-21
98.驗證二叉搜尋樹
基本思想:
遞迴寫法
具體實現:
(1)注意6這個節點不光要小於15而且還要大於10,所以這裡的每一個節點都是有一個範圍的,下面程式碼只判斷了6比15小,但沒有和10進行比較,所以程式碼是錯誤的。
class Solution: def isValidBST(self,root): if not node: return Ture; if root.val <= root.left.val:return Fasle if root.val >= root.right.val:returnFasle return self.isValidBST(root.left) && self.isValidBST(root.right)
(2)給每個節點新增一個範圍,如果不在這個範圍之內直接返回false,比如6的範圍是(10,15),很明顯他不在這個範圍內,所以他不是二叉搜尋樹。
a.函式遞迴呼叫的入口為helper(root,-inf,+inf),inf表示一個無窮大的值。
b.整棵左子樹和右子樹進行比較
遞迴呼叫左子樹時,上界upper改為root.val,即呼叫helper(root.left,lower,root.val)
左子樹裡所有節點的值都小於它的根節點的值
遞迴呼叫右子樹時,下界lower改為root.val,即呼叫helper(root.right,root.val,upper)
右子樹裡所有節點的值都大於它的根節點的值