#include <iostream>
#include <stack>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int a) :val(a), left(NULL), right(NULL) {};
};
void midOrder(TreeNode * p, stack<TreeNode*>& help)
{
if (p == NULL)return;
midOrder(p->left, help);
help.push(p);
midOrder(p->right, help);
}
bool isSearchTree(TreeNode * p)
{
stack<TreeNode*>help;
midOrder(p, help);
int Min = INT_MAX;
while (!help.empty()) {
p = help.top();
help.pop();
if (Min < p->val)return false;
else {
Min = p->val;
}
}
return true;
}