题目链接:98. 验证二叉搜索树 - 力扣(LeetCode)
如果是二叉搜索树的话,中序遍历将其转换为数组后数组有序
class Solution {
public:
//创建数组
vector<int>v;
//中序遍历二叉树,把数据插入到数组中
void f(TreeNode* root) {
if (root == NULL)return;
f(root->left);
v.push_back(root->val);
f(root->right);
}
bool isValidBST(TreeNode* root) {
v.clear();
f(root);
//遍历数组,判断是否为升序
for (int i = 1; i < v.size(); i++) {
if (v[i] <= v[i - 1])return false;
}
return true;
}
};
也可以直接在中序遍历的时候比较,创建一个指针记录上一个数据的大小,通过中序遍历,两两比较元素的大小,判断是否为升序
不把指针设为 int 类型是因为数据可能有 int 类型最小值或 long long 类型最小值
class Solution {
public:
//创建一个指针记录上一个数据的大小
TreeNode* pre = NULL;
bool isValidBST(TreeNode* root) {
if (root == NULL)return true;
bool left = isValidBST(root->left);
//对节点的处理,判断是否为升序
if (pre != NULL && pre->val >= root->val)return false;
//更新指针
pre = root;
bool right = isValidBST(root->right);
return left && right;
}
};
初学者,见解不足,如有错误请指出