算法思路:递归判断根节点大于左侧子树的最右侧节点(即子树最大值),根节点小于右侧子树的最左侧节点(即最小值)
其中寻找子树的最左最右节点分别写了一个递归函数
int leftMax(TreeNode* root)
{
int max = root->val;
if (root->right)
max = leftMax(root->right);
return max;
}
int rightMin(TreeNode* root)
{
int min = root->val;
if (root->left)
min = rightMin(root->left);
return min;
}
bool isValidBSTCore(TreeNode* root)
{
if (root->left == NULL && root->right == NULL)
return true;
bool flag_left, flag_right;
flag_left = flag_right = true;
int left_max, right_min;
if (root->left)
{
flag_left = isValidBSTCore(root->left);
left_max = leftMax(root->left);
}
if (root->right)
{
flag_right = isValidBSTCore(root->right);
right_min = rightMin(root->right);
}
bool flag_root_left &#