题目描述
视频里面最后一句是不是有问题呀,为啥还ac了,dfs(k, r-1).
样例
class Solution {
public:
vector<int> seq;
bool verifySequenceOfBST(vector<int> sequence) {
seq = sequence;
return dfs(0, seq.size() - 1);
}
bool dfs(int l, int r) {
if (l >= r) return true;
int root = seq[r];
int k = l;
while(k < r && seq[k] < root) k ++;
for(int i = k; i < r; i ++) {
if (seq[i] < root)
return false;
}
return dfs(l, k - 1) && dfs(k, r-1);
}
};
//什么是二叉搜索树
/
它或者是一棵空树,或者是具有下列性质的二叉树:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
/
class Solution {
public:
bool dfs(int st,int idx,vector[HTML_REMOVED]seq)
{
};
问下,这道题我的思路是从后往前写的dfs,你看下,思路我调了感觉没啥问题
在2 1 3 这组数据上可以测出bug
大佬帮忙看下是不是只能从左往由写,不能从右往左写。
y总写错了,你的是正确的
这个能过
我和你一样的疑问
你好我我改我自己的代码死活不过,这边跑你的代码貌似也是RE了,好神奇啊
我刚跑了一遍可以的啊
if (l >= r) return true; 为什么这行判断不可以换成if (l == r) return true;
递归的时候,会出现l大于r的情况,比如说k=l,或者k= r的时候,在 下次递归的时候,就会出现l > r, 数组越界。
传引用的方式是不是更好一些~
同意
if(sequence.empty())
return false;