力扣 98 驗證二叉搜尋樹

2022-05-19 17:42:49 字數 1023 閱讀 4339

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。

假設乙個二叉搜尋樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 1:

輸入:2

/ \1 3

輸出: true

示例 2:

輸入:5

/ \1 4

/ \3 6

輸出: false

解釋: 輸入為: [5,1,4,null,null,3,6]。

根節點的值為 5 ,但是其右子節點值為 4 。

public

boolean

isvalidbst(treenode root)

//時間複雜度: o(n)

//空間複雜度:o(n)

//在原有的遞迴中,增加界限值

//限制每個節點的最大值和最小值

public

boolean dfs(treenode root,long max,long

min)

if(root.val >= max || root.val <=min)

return dfs(root.right,max,root.val) &&dfs(root.left,root.val,min);

}

public

int pre =integer.min_value;

//時間複雜度和空間複雜度同上面相同,不過邏輯取巧,更簡單了

public

boolean

isvalidbst(treenode root)

if(!isvalidbst(root.left))

if(root.val <=pre)

pre =root.val;

return

isvalidbst(root.right);

}

力扣 98 驗證二叉搜尋樹

題目 傳送門 題目分析 二叉搜素樹有乙個很重要的性質 若左子樹不空,則左子樹上的所有結點的值均小於它的根節點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根節點的值。那麼,很容易得到,對二叉搜尋樹進行中序遍歷,得到的序列應該是公升序的。這樣的話,我們在中序遍歷的時候檢查當前節點的值是否大於...

力扣Leetcode 98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 輸入 2 1 3 輸出 true輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 一開始想的是遞迴分支 有點類似貪心思想 忽略了...

98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...