题目描述:
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 3Binary tree
[2,1,3]
, return true.
Example 2:
1 / \ 2 3Binary tree
[1,2,3]
, return false.
一开始的想法是遍历二叉树,判断每一个节点的值是否大于其左节点的值且小于右节点的值,但是这种做法可能出现某节点的右子树包含小于这个节点的值,但是右子树中的这个节点满足上述条件,例如:
4 / \ 1 6 / \ 3 7这是不满足BST的要求的,所以考虑用中序遍历得到数组,然后判断该数组是否为单增的,就可以判断是否为BST。
class Solution {
public:
vector<int> v;
void DFS(TreeNode* root)
{
if(root!=NULL)
{
if(root->left!=NULL)
{
DFS(root->left);
}
v.push_back(root->val);
if(root->right!=NULL)
{
DFS(root->right);
}
}
else return;
}
bool isValidBST(TreeNode* root)
{
v.clear();
DFS(root);
if(v.size()==0) return true;
bool isvalid=true;
for(int i=0;i<v.size()-1;i++)
{
if(v[i]>=v[i+1])
{
isvalid=false;
break;
}
}
return isvalid;
}
};