題目描述
請實現一個函數,檢查一棵二叉樹是否爲二叉查找樹。
給定樹的根結點指針TreeNode* root,請返回一個bool,代表該樹是否爲二叉查找樹。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Checker {
public:
bool checkBST(TreeNode* root)
{
stack<TreeNode*>tmpStack;
TreeNode* pNode=root;
int minVal=-1000;//初始化一個最小值;
if (root==NULL)
{
return 1;//空樹是二叉排序樹;
}
else
{
while(pNode||!tmpStack.empty())
{
while(pNode)
{
tmpStack.push(pNode);//左孩子入棧;
pNode=pNode->left;
}
if (!tmpStack.empty())
{
if (minVal>tmpStack.top()->val)
{
return 0;
}
minVal=tmpStack.top()->val;
pNode=tmpStack.top()->right;
tmpStack.pop();//出棧;
}
}
return 1;
}
}
};