问题描述
lintcode
笔记
- 代码1是用到中序遍历,要求中序遍历是严格的增序。用到了辅助空间。
- 代码2是leetcode上面的解法,用到了prev指针记录前一个节点,省下了辅助空间,而且要注意prev传进去还应该是引用。
代码1
class Solution {
public:
bool isValidBST(TreeNode *root) {
vector<int> res;
res.clear();
Inorder(root, res);
if (res.empty() || res.size() == 1)
return true;
for (int i = 0; i < res.size() - 1; i++)
{
if (res[i] >= res[i+1])
return false;
}
return true;
}
void Inorder(TreeNode *root, vector<int> &res)
{
if (root == NULL)
return;
Inorder(root->left, res);
res.push_back(root->val);
Inorder(root->right, res);
}
};
代码2
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isValidBST(TreeNode* root)
{
TreeNode *pre = NULL;
return validate(root, pre);
}
bool validate(TreeNode *root, TreeNode *&pre)
{
if (root == NULL)
return true;
if (!validate(root->left, pre))
return false;
if (pre != NULL && pre->val >= root->val)
return false;
pre = root;
return validate(root->right, pre);
}
};