题意:
判断一个数是否是二叉搜索树。
思路:
二叉排序树的任意一个节点的左节点比其小,右节点比其大,那么中序遍历会得到一个有序数组。利用非递归遍历,每次的数都应该比上次的大,否则就不是BST。
bool isValidBST(TreeNode* root) {
if (!root)
return true;
if (!(root->right || root->left))
return true;
TreeNode* p = root;
int flag = 1;
int last;
stack<TreeNode*> s;
while (p || !s.empty()) {
while (p) {
s.push(p);
p = p->left;
}
if (!s.empty()) {
p = s.top();
if (flag) {
last = p->val;
flag = 0;
}
else if (p->val <= last) {
return false;
}
last = p->val;
s.pop();
p = p->right;
}
}
return true;
}