驗證二叉搜尋樹
** ** algorithms
* medium (27.95%)
* likes: 340
* dislikes: 0
* total accepted: 53k
* total submissions: 189.7k
* testcase example: '[2,1,3]'
** 給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。
* * 假設乙個二叉搜尋樹具有如下特徵:
* *
* 節點的左子樹只包含小於當前節點的數。
* 節點的右子樹只包含大於當前節點的數。
* 所有左子樹和右子樹自身必須也是二叉搜尋樹。
* *
* 示例 1:
* * 輸入:
* 2
* / \
* 1 3
* 輸出: true
* *
* 示例 2:
* * 輸入:
* 5
* / \
* 1 4
* / \
* 3 6
* 輸出: false
* 解釋: 輸入為: [5,1,4,null,null,3,6]。
* 根節點的值為 5 ,但是其右子節點值為 4 。
* *
*/根據二叉搜尋樹的定義 其中序遍歷是遞增的
//中序遍歷
class
solution
cur=ss.top();
ss.pop();
if(pre&&pre->val >= cur->val) return
false
; pre=cur;
cur=cur->right;
}return
true
; }};
//直覺乍一看,這是乙個平凡的問題。只需要遍歷整棵樹,檢查 node.right.val > node.val 和遞迴我是真的想不開啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
//啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
//啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
//啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
class
solution
public
:
bool isvalidbst(treenode*root)
};
node.left.val < node.val 對每個結點是否成立。
問題是,這種方法並不總是正確。不僅右子結點要大於該節點,整個右子樹的元素都應該大於該節點。例如:
這意味著我們需要在遍歷樹的同時保留結點的上界與下界,在比較時不僅比較子結點的值,也要與上下界比較。
**就是上面的遞迴方式,,在子樹是否為二叉樹的判定中,*low和*up是不同的值。如上圖 遍歷到4時,其lower是5,upper是6
leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 1 3 輸出 true 示例 2 輸入 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 關鍵資訊 1二叉搜尋樹的中序遍歷是遞...
leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 解題思路 中序遍歷遞增,每次只...
leetcode 98 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。乙個二叉搜尋樹具有如下特徵 示例 1 輸入 2 1 3 輸出 true示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1,4,null,null,3,6 根節點的值為 5 但是其右子節點值為 4 如果對二叉搜尋樹不夠了解,可能...