今天是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...