题意:

判断一个数是否是二叉搜索树。

思路:

二叉排序树的任意一个节点的左节点比其小,右节点比其大,那么中序遍历会得到一个有序数组。利用非递归遍历,每次的数都应该比上次的大,否则就不是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;
}