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.
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.
思路:判断一棵树是不是一个二叉查找树,中序遍历看看是不是一个递增的序列。
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode
{
int data;
TreeNode *left;
TreeNode *right;
TreeNode(int x):data(x),left(NULL),right(NULL) {}
};
//判断一棵树是不是一个二叉查找树,中序遍历看看是不是一个递增的序列。
class solution
{
private:
vector<int> vec;
public:
void midTraverse(TreeNode *root)
{
if(root == NULL) return;
midTraverse(root->left);
vec.push_back(root->data);
midTraverse(root->right);
}
void show()
{
for(int i=0;i<vec.size();i++)
{
printf("%d ",vec[i]);
}
printf("\n");
}
bool isBST(TreeNode *root)
{
if(root == NULL) return true;
vec.clear();
midTraverse(root);
for(int i=1;i<vec.size();i++)
{
if(vec[i] < vec[i-1])
return false;
}
return true;
}
};
//创建一个二叉树
void buildTree2(TreeNode **T)
{
int ch;
cin>>ch;
if(ch == 0)
{
*T = NULL;
}
else
{
*T = new TreeNode(ch);
printf("请输入%d的左孩子:",ch);
buildTree2(&((*T)->left));
printf("请输入%d的右孩子:",ch);
buildTree2(&((*T)->right));
}
}
void main()
{
vector<int> vec;
TreeNode *T;
buildTree2(&T);
solution *sol = new solution;
sol->midTraverse(T);
sol->show();
bool flag = sol->isBST(T);
printf("The is %s binary search tree!",flag?"true":"false");
printf("\n");
delete sol;
}