一、题目描述
给定一个二叉树,验证它是否是二叉搜索树(每个节点的值都大于其左子树的所有节点的值,小于右子树的所有节点的值)
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 thanthe 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 tree
二、思路
从反面考虑不为二叉搜索树的情况,然后用递归实现
三、C代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isValidBST(struct TreeNode* root){
if(root == NULL) {
return true;
}
if(root->left != NULL) {
struct TreeNode *current = root->left;
while(current->right != NULL) {
current = current->right;
}
if(current->val >= root->val) {
return false;
}
}
if(root->right != NULL) {
struct TreeNode *current = root->right;
while(current->left != NULL) {
current = current->left;
}
if(current->val <= root->val) {
return false;
}
}
if(!isValidBST(root->left)) {
return false;
}
if(!isValidBST(root->right)) {
return false;
}
return true;
}