【ALGO】Leetcode 98.驗證二叉搜尋樹
題面
給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。
假設一個二叉搜尋樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。
解析
可以使用中序遍歷
的性質或者根據定義進行判斷
AC程式碼
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(!root) return true;
return dfs(root)[0];
}
// <子樹狀態, 左子樹最大值, 右子樹最小值>
vector<int> dfs(TreeNode *root){
vector<int> ans({1, root->val, root->val});
if(root->left){
auto t = dfs(root->left);
if(!t[0] || t[1]>=root->val) ans[0]=0;
// 更新極值
ans[1]=max(ans[1], t[1]);
ans[2]=min(ans[2], t[2]);
}
if(root->right){
auto t=dfs(root->right);
if(!t[0] || t[2]<=root->val) ans[0]=0;
// 更新極值
ans[1]=max(ans[1], t[1]);
ans[2]=min(ans[2], t[2]);
}
return ans;
}
};
相關文章
- 【LeetCode】98. 驗證二叉搜尋樹LeetCode
- LeetCode98. 驗證二叉搜尋樹LeetCode
- LeetCode-098-驗證二叉搜尋樹LeetCode
- dfs 驗證搜尋二叉樹——leetcode98二叉樹LeetCode
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- 程式碼隨想錄演算法訓練營第第20天 | 654.最大二叉樹 、617.合併二叉樹 、700.二叉搜尋樹中的搜尋、98.驗證二叉搜尋樹演算法二叉樹
- 程式碼隨想錄 第20天 20的總結沒看 | 654.最大二叉樹 ● 617.合併二叉樹 ● 700.二叉搜尋樹中的搜尋 ● 98.驗證二叉搜尋樹二叉樹
- 程式碼隨想錄演算法訓練營第十七天|leetcode654. 最大二叉樹、leetcode617.合併二叉樹、leetcode700.二叉搜尋樹中的搜尋、leetcode98.驗證二叉搜尋樹演算法LeetCode二叉樹
- 程式碼隨想錄演算法訓練營第十七天| 654.最大二叉樹 , 617.合併二叉樹 , 700.二叉搜尋樹中的搜尋 , 98.驗證二叉搜尋樹演算法二叉樹
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- LeetCode HOT 100:驗證二叉搜尋樹(從左右子樹獲取資訊進行推導)LeetCode
- LeetCode 95 | 構造出所有二叉搜尋樹LeetCode
- LeetCode-099-恢復二叉搜尋樹LeetCode
- LeetCode-096-不同的二叉搜尋樹LeetCode
- LeetCode-173-二叉搜尋樹迭代器LeetCode
- leetcode 700. 二叉搜尋樹中的搜尋 思考分析LeetCode
- [leetCode]95. 不同的二叉搜尋樹 IILeetCode
- leetcode-1382. 將二叉搜尋樹變平衡LeetCode
- LeetCode-095-不同的二叉搜尋樹 IILeetCode
- 二叉搜尋樹
- leetcode 235. 二叉搜尋樹的最近公共祖先LeetCode
- LeetCode 109——有序連結串列轉化二叉搜尋樹LeetCode
- (117)235. 二叉搜尋樹的最近公共祖先(leetcode)LeetCode
- 從二分搜尋到二叉搜尋樹
- LeetCode系列之「有序連結串列轉換二叉搜尋樹」LeetCode
- <動態規劃>Leetcode96.不同的二叉搜尋樹動態規劃LeetCode
- LeetCode-109-有序連結串列轉換二叉搜尋樹LeetCode
- LeetCode-230-二叉搜尋樹中第K小的元素LeetCode
- Leetcode230. 二叉搜尋樹中第K小的元素LeetCode
- Leetcode 938. 二叉搜尋樹的範圍和(DAY 2)LeetCode
- LeetCode將有序陣列轉化為二叉搜尋樹--JavaLeetCode陣列Java
- 程式碼隨想錄day18 || 530 二叉搜尋樹最小差,501 二叉搜尋樹眾數,236 二叉搜尋樹最近公共祖先
- 二叉搜尋樹的操作集
- 二叉搜尋樹的結構
- javascript實現二叉搜尋樹JavaScript
- 有序表和搜尋二叉樹二叉樹
- LeetCode 108. 將有序陣列轉換為二叉搜尋樹LeetCode陣列
- LeetCode-108-將有序陣列轉換為二叉搜尋樹LeetCode陣列