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;
}
本文介绍了一种通过中序遍历来判断二叉树是否为有效的二叉搜索树的方法,并提供了完整的C++实现代码。
352

被折叠的 条评论
为什么被折叠?



