1. 程式人生 > 實用技巧 >力扣98題(二叉搜尋樹,遞迴)

力扣98題(二叉搜尋樹,遞迴)

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:return
Fasle 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)

右子樹裡所有節點的值都大於它的根節點的值

程式碼: