知识点
搜索二叉树除了他们结点之间有序外,还有一个很重要的特性,就是中序遍历搜索二叉树时,会发现是一个递增的序列。
思路:我们可以利用这个特性对搜索二叉树进行中序遍历,遍历的同时将结果记录在一个数组中,然后对这个数组进行判断看起是否递增。
class Solution {
private:
vector<int> vec;
void traversal(TreeNode* root) {
if (root == NULL) return;
traversal(root->left);
vec.push_back(root->val); // 将二叉搜索树转换为有序数组
traversal(root->right);
}
public:
bool isValidBST(TreeNode* root) {
vec.clear(); // 不加这句在leetcode上也可以过,但最好加上
traversal(root);
for (int i = 1; i < vec.size(); i++) {
// 注意要小于等于,搜索树里不能有相同元素
if (vec[i] <= vec[i - 1]) return false;
}
return true;
}
};
时间复杂度:O(N)