[LeetCode]98. Validate Binary Search Tree
题目描述
思路
比较节点是否有序
注意点,不是只考虑当前节点是否满足,还应该考虑他们与父节点的父节点之间的关系
即代码中的 minNode和maxNode
代码
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
bool isValidBST(TreeNode* root) {
return isValidBST(root, NULL, NULL);
}
bool isValidBST(TreeNode* root, TreeNode* minNode, TreeNode* maxNode) {
if (root == NULL)
return true;
if (minNode && minNode->val >= root->val)
return false;
if (maxNode && maxNode->val <= root->val)
return false;
return isValidBST(root->left, minNode, root) && isValidBST(root->right, root, maxNode);
}
};
int main() {
TreeNode* node1 = new TreeNode(10);
TreeNode* node2 = new TreeNode(5);
TreeNode* node3 = new TreeNode(15);
TreeNode* node4 = new TreeNode(6);
TreeNode* node5 = new TreeNode(20);
node1->left = node2, node1->right = node3;
node3->left = node4, node3->right = node5;
Solution s;
cout << s.isValidBST(node1) << endl;
system("pause");
return 0;
}
本文介绍了一种递归方法来验证一棵二叉树是否为有效的二叉搜索树。通过定义辅助函数并设置最大和最小节点限制,确保了树中每个节点的值都符合二叉搜索树的要求。
498

被折叠的 条评论
为什么被折叠?



