给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
节点的左子树中的值要严格小于该节点的值。
节点的右子树中的值要严格大于该节点的值。
左右子树也必须是二叉查找树。
一个节点的树也是二叉查找树。
样例
一个例子:
#ifndef C95_H
#define C95_H
#include<iostream>
#include<vector>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int val){
this->val = val;
this->left = this->right = NULL;
}
};
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
vector<TreeNode*> v;
bool isValidBST(TreeNode *root) {
// write your code here
if (root == NULL)
return true;
if (root->left == NULL || root->right == NULL)
return true;
inorder(root);
for (int i = 0; i < v.size() - 1; ++i)
{
if (v[i]->val >= v[i + 1]->val)
{
return false;
break;
}
}
return true;
}
void inorder(TreeNode* root)
{
if (root != NULL)
{
inorder(root->left);
v.push_back(root);
inorder(root->right);
}
}
};
#endif