Leetcode 98 驗證二叉搜尋樹

2022-10-08 21:09:23 字數 1729 閱讀 2629

給你乙個二叉樹的根節點root,判斷其是否是乙個有效的二叉搜尋樹。

有效二叉搜尋樹定義如下:

示例 1:

輸入:root = [2,1,3]

輸出:true

例項2:

輸入:root = [5,1,4,null,null,3,6]

輸出:false

解釋:根節點的值是 5 ,但是右子節點的值是 4 。

​ 遞迴有乙個很重要的地方:我們在判斷乙個節點值大小關係的時候,要與它所有的祖先節點進對比,不能只跟父節點對比。所以我們可以定義乙個 遞迴函式reversevalidbst(treenode root, long minvalue, long maxvalue)

​ 函式表示考慮以root為根的子樹,判斷子樹中所有節點的值是否都在(l,r)的範圍內(注意是開區間)。如果root節點的值val不在(l,r)的範圍內說明不滿足條件直接返回,否則我們要繼續遞迴呼叫檢查它的左右子樹是否滿足,如果都滿足才說明這是一棵二叉搜尋樹。

public boolean isvalidbst(treenode root) 

private boolean reversevalidbst(treenode root, long minvalue, long maxvalue)

if (root.val <= minvalue || root.val >= maxvalue)

return reversevalidbst(root.left, minvalue, root.val) && reversevalidbst(root.right, root.val, maxvalue);

}

​ 根據二叉搜尋樹的性質我們可以得到:二叉搜尋樹的中序遍歷是遞增的。所以我們只需要中序遍歷這棵樹。判斷結點的值是不是遞增即可。

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class solution

stackqueue = new stack<>();

long lastnumber = long.min_value;

while (!queue.isempty() || root!=null)

root = queue.pop();

if (root.val <= lastnumber)

lastnumber = root.val;

root = root.right;

}return true;}}

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 如果對二叉搜尋樹不夠了解,可能...