问题描述:
给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
思路一:
由于二叉查找树的特有性质,若我们按中序输出该树,按左子树--根--右子树的顺序输出,那么输出元素将是递增的!
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
bool isValidBST(TreeNode *root) {
if (root==NULL) {
return true;
}
stack<TreeNode*> s;
while (root) {
s.push(root);
root = root->left;
}
root = s.top();
int old = root->val;
root = root->right;
s.pop();
while (!s.empty() || root!=NULL) {
if (root) {
s.push(root);
root = root->left;
} else {
root = s.top();
if (root->val <= old){
return false;
}
old = root->val;
s.pop();
root = root->right;
}
}
return true;
}
};