1.第一种方法是使用递归,我没有写,题解里有
2.第二种方法是使用堆栈,开始我忽略了这种情况
只做了相邻的判断,怎么把这个顶点和上面所有顶点都比较呢,递归是把上届下届都作为入口参数,堆栈的中序遍历有一个性质:二叉搜索树的中序遍历是递增的,用这个性质就可以判断了,这里还有个坑,就是比较初始值得给一个很小很小的,int的范围是(-2147483648~2147483647),占用4个字节,有一个输入是[-2147483648]; long和int本质是一样的,所以要用long long,再就没啥了
class Solution {
public:
bool isValidBST(TreeNode* root) {
TreeNode* myNode = root;
stack<TreeNode*> S;
long frontVal = -INT_MAX-1;
while ((myNode != nullptr) || (!S.empty())) {
while (myNode != nullptr) {
S.push(myNode);
myNode = myNode->left;
}
if (!S.empty()) {
myNode = S.top();
S.pop();
//printf("%d", myNode->val);
//if (myNode->left != nullptr) {
// if (myNode->left->val >= myNode->val) {
// return false;
// }
//}
//if (myNode->right != nullptr) {
// if (myNode->right->val <= myNode->val) {
// return false;
// }
//}
//二叉搜索树,中序遍历,一定是递增的
if (frontVal >= myNode->val) {
return false;
}
frontVal = myNode->val;
myNode = myNode->right;
}
}
return true;
}
};
这里还复习了一下C++的构造函数,