題目:傳送門
題目分析:二叉搜素樹有乙個很重要的性質:
若左子樹不空,則左子樹上的所有結點的值均小於它的根節點的值;
若它的右子樹不空,則右子樹上所有結點的值均大於它的根節點的值。
那麼,很容易得到,對二叉搜尋樹進行中序遍歷,得到的序列應該是公升序的。
這樣的話,我們在中序遍歷的時候檢查當前節點的值是否大於前一次中序遍歷的節點的值即可,中序遍歷用二叉樹維護。
在使用棧的中序遍歷中加入,判斷當前節點與上一次中序遍歷的節點值即可。
/** * definition for a binary tree node.
* struct treenode
* }; */
class
solution
curr =stack.top();
stack.pop();
if(curr->val <= pre) return
false
; pre = curr->val;
curr = curr->right;
}return
true
; }
};
方法二:維護每個節點值$lower$和$upper$,然後中序遍歷二叉搜尋樹,並判斷是否滿足即可。
/** * definition for a binary tree node.
* struct treenode
* }; */
typedef
long
long
ll;class
solution
if(root->val >= upper || root->val <= lower) return
false
;
if(!dfs(root->right, upper, root->val) || !dfs(root->left, root->val, lower)) return
false
;
return
true
; }
bool isvalidbst(treenode*root)
};
力扣 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...
力扣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 解釋 ...