给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
解题思路:有效的二叉搜索树,中序遍历是从小到大的有效数组,因此可以中序遍历将二叉搜索树转换为数组,通过数组是否有序来判断是否是二叉搜索树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void transform(TreeNode* root,vector<int>&v)
{
if(root==NULL) return;
transform(root->left,v);
v.push_back(root->val);
transform(root->right,v);
}
bool isValidBST(TreeNode* root) {
vector<int>v;
transform(root,v);
for (int i = 1; i < v.size(); i++) {
// 注意要⼩于等于,搜索树⾥不能有相同元素
if (v[i] <= v[i - 1]) return false;
}
return true;
}
};