每日一題 98 驗證二叉搜尋樹

2021-10-05 18:45:41 字數 1071 閱讀 2990

今天是2023年5月5日,星期二,時隔好幾天沒有在寫每日一題,因為五一期間自己也有一些事情,最近還生病打點滴。

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

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

輸入:

2/ \

1 3

輸出: true

示例 2:

輸入:

5/ \

1 4

/ \3 6

輸出: false

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

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

在開始看本題目的時候,認為只需要判定當前節點值比其左右節點值大即可。在實現時使用了二叉樹的層次遍歷即可能會誤判,即右子樹中存在比根節點小的值,這個值本來應該在左子樹中某乙個節點的右子樹上。下圖所示的情況就會出現誤判操作。

可以使用二叉樹的中序遍歷,左中右的遍歷順序,可以保證先到達子樹的根節點後,由下向上比較,這時只要保證左子樹值《根節點值,右子樹的值》根節點,那麼絕對不會存在誤判情況。判斷過程如下所示。

// 訪問左子樹

if (!isvalidbst(root.left))

// 如果當前節點的值小於之前中序遍歷的值,則說明不滿足bst,返回false;

if (root.val <= pre)

pre = root.val;

if (!isvalidbst(root.right))

return true;}}

每日一題 leetcode 98 驗證二叉搜尋樹

驗證二叉搜尋樹 難度中等513 給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為...

98 驗證二叉搜尋樹

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

98 驗證二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 import sys cl...