验证二叉搜索树
这个题容易有陷阱直接进行以下操作
if(root->val > root->left->val && root->val < root->right->val)
return true
我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。
举例子
这个是错的因为6比10小所以上面的代码逻辑是错误的
正确的应该按照搜索树的特点转换成一个有序的数组然后根据数组进行判断
class Solution {
public:
vector<int>ans;
bool isValidBST(TreeNode* root) {
traversal(root);
for(int i=1;i<ans.size();i++)
{
if(ans[i]<=ans[i-1]) return false;//因为搜索树里面不存在相等的所以也是false
}
return true;
}
void traversal(TreeNode*root)//变成一个有序的数组(搜索树有这种特征
{
if(root==NULL) return;
traversal(root->left);//先加入左子树
ans.push_back(root->val);//再加入根节点
traversal(root->right);//再加入右子树
}
};