哈爾濱暫停現(xiàn)場(chǎng)業(yè)務(wù)內(nèi)蒙古seo
給你一個(gè)二叉樹的根節(jié)點(diǎn)?
root
?,判斷其是否是一個(gè)有效的二叉搜索樹。有效?二叉搜索樹定義如下:
- 節(jié)點(diǎn)的左子樹只包含?小于?當(dāng)前節(jié)點(diǎn)的數(shù)。
- 節(jié)點(diǎn)的右子樹只包含?大于?當(dāng)前節(jié)點(diǎn)的數(shù)。
- 所有左子樹和右子樹自身必須也是二叉搜索樹。
示例 1:
輸入:root = [2,1,3] 輸出:true示例 2:
輸入:root = [5,1,4,null,null,3,6] 輸出:false 解釋:根節(jié)點(diǎn)的值是 5 ,但是右子節(jié)點(diǎn)的值是 4 。提示:
- 樹中節(jié)點(diǎn)數(shù)目范圍在
[1, 104]
?內(nèi)-231 <= Node.val <= 231 - 1
遞歸(通過形參改變?nèi)≈捣秶?#xff09;:
class Solution {
public:bool func(TreeNode *root,long long lower,long long upper){if(root==nullptr)return true;if(root->val<=lower||root->val>=upper)return false;return func(root->left,lower,root->val)&&func(root->right,root->val,upper);}bool isValidBST(TreeNode* root) {return func(root,LONG_MIN,LONG_MAX);}
};
遞歸(中序遍歷)(通過比較當(dāng)前節(jié)點(diǎn)值和上一個(gè)節(jié)點(diǎn)值):
中序遍歷是左中右的順序,剛剛好搜索二叉樹的特點(diǎn)是左<中<右。
class Solution {
public:TreeNode *pre=nullptr;bool isValidBST(TreeNode* root) {if(root==nullptr)return true;bool left=isValidBST(root->left);if(pre!=nullptr&&pre->val>=root->val)return false;pre=root;bool right=isValidBST(root->right);return left&&right;}
};