98. Validate Binary Search Tree

请看题

Example

思路

这道题要求我们去判断一棵树是不是一颗二叉树,那么二叉树的特征就是其左子树节点一定小于其当前节点,右子树节点则是大于。

有两种方式,使用Inorden算法,将每一节点存入到容器中然后去比较,如果不符合inorden的规则那么必定为false。反之True。

本文实现的是第二种方法,在进行判断的时候就顺便处理了,定义一个私有方法用来给公共方法调用。

私有方法的实现逻辑是

  • 如果 root 为空(即到达叶子节点的子节点),返回 true
  • 如果当前节点的值不满足 BST 的定义(即小于等于 min 或大于等于 max),返回 false。也就是第二个if
  • 递归检查左子树和右子树,左子树的最大值为当前节点,右子树的最小值为当前节点。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
bool validBst(TreeNode *root, TreeNode *min, TreeNode *max)
{
if(!root) { return true; }
if(min && root->val <= min->val || max && root->val >= max->val)
{ return false; }
return validBst(root->left, min, root) && validBst(root->right, root, max);
}
public:
bool isValidBST(TreeNode* root) {
if(!root->left && !root->right)
{
return true;
}
return validBst(root,nullptr, nullptr);
}
};

结束。


98. Validate Binary Search Tree
http://example.com/2024/06/02/98. Validate Binary Search Tree/
作者
OneWhiteThree
发布于
2024年6月2日
许可协议