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.
解题思路:采用中序遍历的方式,比较当前节点和上次遍历节点的值得大小,如果当前节点的值小于等于上一次遍历的节点的值则返回false,依此递归遍历即可。
bool isValidBST(TreeNode* root) {
TreeNode* prev = NULL;//用来保存上一次遍历节点的值
return isValidBST(root,prev);//递归遍历进行判断
}
bool isValidBST(TreeNode* root,TreeNode* &prev)
{
if(NULL == root) return true;
if(!isValidBST(root->left,prev)) return false;
if(prev!=NULL && prev->val >= root->val) return false;//由于采用的是中序遍历,如果当前节点的值是小于等于上一个节点的值,则返回false
prev = root;//更新prev
return isValidBST(root->right,prev);
}