首先理解一下什么是合法搜索二叉树,通俗来说就是一棵树的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值或者是一棵空树(来源于百度)
二叉搜索树可以用中序遍历来判断,因为想太多和太垃圾,我的代码只过一半的数据,然后就双看了大佬的题解,改完代码如下(记得val定义为long,int只能过69组数据)因为我又错了 :
/**
* 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 {
private:
bool flag=true;
long val=LONG_MIN;
void dfs(TreeNode* root)
{
if(root==NULL)
return;
dfs(root->left);
if(root->val<=val)
{
flag=false;
return;
}
else val=root->val;
dfs(root->right);
}
public:
bool isValidBST(TreeNode* root) {
dfs(root);
return flag;
}
};
参考来源:
链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci/solution/mian-shi-ti-0405-he-fa-er-cha-sou-suo-shu-dfs-by-y/
作者:yyc-13
来源:力扣(LeetCode)