【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
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- LeetCode98. 驗證二叉搜尋樹LeetCode
- LeetCode-098-驗證二叉搜尋樹LeetCode
- dfs 驗證搜尋二叉樹——leetcode98二叉樹LeetCode
- 程式碼隨想錄 第20天 20的總結沒看 | 654.最大二叉樹 ● 617.合併二叉樹 ● 700.二叉搜尋樹中的搜尋 ● 98.驗證二叉搜尋樹二叉樹
- 程式碼隨想錄演算法訓練營第第20天 | 654.最大二叉樹 、617.合併二叉樹 、700.二叉搜尋樹中的搜尋、98.驗證二叉搜尋樹演算法二叉樹
- 程式碼隨想錄演算法訓練營第十七天| 654.最大二叉樹 , 617.合併二叉樹 , 700.二叉搜尋樹中的搜尋 , 98.驗證二叉搜尋樹演算法二叉樹
- 程式碼隨想錄演算法訓練營第十七天|leetcode654. 最大二叉樹、leetcode617.合併二叉樹、leetcode700.二叉搜尋樹中的搜尋、leetcode98.驗證二叉搜尋樹演算法LeetCode二叉樹
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- 二叉搜尋樹
- LeetCode HOT 100:驗證二叉搜尋樹(從左右子樹獲取資訊進行推導)LeetCode
- leetcode 700. 二叉搜尋樹中的搜尋 思考分析LeetCode
- LeetCode 95 | 構造出所有二叉搜尋樹LeetCode
- LeetCode-173-二叉搜尋樹迭代器LeetCode
- [leetCode]95. 不同的二叉搜尋樹 IILeetCode
- leetcode-1382. 將二叉搜尋樹變平衡LeetCode
- LeetCode-096-不同的二叉搜尋樹LeetCode
- LeetCode-099-恢復二叉搜尋樹LeetCode
- LeetCode-095-不同的二叉搜尋樹 IILeetCode
- javascript實現二叉搜尋樹JavaScript
- 二叉搜尋樹的操作集
- 有序表和搜尋二叉樹二叉樹
- 二叉搜尋樹的結構
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 演算法篇 - 二叉搜尋樹演算法
- 資料結構-二叉搜尋樹資料結構
- 【資料結構】二叉搜尋樹!!!資料結構
- 二叉搜尋樹程式碼例項
- 96. 不同的二叉搜尋樹
- LeetCode將有序陣列轉化為二叉搜尋樹--JavaLeetCode陣列Java
- Leetcode 938. 二叉搜尋樹的範圍和(DAY 2)LeetCode
- leetcode 235. 二叉搜尋樹的最近公共祖先LeetCode
- LeetCode系列之「有序連結串列轉換二叉搜尋樹」LeetCode
- <動態規劃>Leetcode96.不同的二叉搜尋樹動態規劃LeetCode