98. Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node's key.
The right subtree of a node contains only nodes with keys greater than the node's key.
Both the left and right subtrees must also be binary search trees.
Example 1:
2
/ \
1 3
Binary tree [2,1,3], return true.
Example 2:
1
/ \
2 3
Binary tree [1,2,3], return false.
【解法一】我的解法,引入最大最小值
class Solution {
public:
bool isValidBST(TreeNode* root) {
return isvalid(root, LONG_MIN, LONG_MAX);
}
bool isvalid(TreeNode *root, long MIN, long MAX) {
if (!root) return true;
if (root->val <= MIN || root->val >= MAX) return false;
return isvalid(root->left, MIN, root->val) && isvalid(root->right, root->val, MAX);
}
};
【解法二】网上的其他解法,中序遍历存入数组中,判断a[i]>a[i+1]
class Solution {
public:
vector<int> temp;
bool isValidBST(TreeNode* root) {
inOrderTraversal(root);
if(temp.size()<=1) return true;
for(int i=1;i<temp.size();i++){
if(temp[i]<=temp[i-1]) return false;
}
return true;
}
void inOrderTraversal(TreeNode * root){
if(!root) return;
inOrderTraversal(root->left);
temp.push_back(root->val);
inOrderTraversal(root->right);
}
};