AcWing 46. 二叉搜索树的后序遍历序列(中序和后序遍历)
原题链接
简单
作者:
天命
,
2020-05-09 15:58:32
,
所有人可见
,
阅读 2609
class Solution {
public:
bool verifySequenceOfBST(vector<int> sequence) { //方法一,利用中序和后序来重建二叉树
vector<int> in;
in = sequence;
int n = in.size();
sort(in.begin(), in.end());
return build(sequence, in, 0, n - 1, 0, n - 1);
}
bool build(vector<int> &post, vector<int> &in, int il, int ir, int pl, int pr){
if(pl > pr) return true;
int root = post[pr];
int k;
for(k = il; k <= ir; k++){
if(in[k] == root) break;
}
int num = k - il;
for(int i = pl; i <= pl + num - 1; i++){ //后序遍历当前左子树内有大于根节点的值
if(post[i] > root) return false;
}
return(k > pl ? build(post, in, il, k - 1, pl, pl + num - 1):true) &&
(k < pr ? build(post, in, k + 1, ir, pl + num, pr - 1):true);
}
};
👍
这是n^2的时间复杂度吧
我觉得时间复杂度是O(nlogn)
感觉这也不是O(n)啊,不是最优解吧
嗯嗯,不是最优解。只是另一种解法
k > pl ?和k < pr ?两个判断好像不需要,
能讲讲这两句什么意思吗
好像是不需要,哈哈哈。主要是判断区间是否还能继续二分。