题解 | #二叉搜索树的后序遍历序列#
二叉搜索树的后序遍历序列
https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd
class Solution {
bool check(vector<int>& sequence, int l, int r) {
if(l >= r)
return true;
int root = sequence[r];
int j = r - 1;
while(j >= 0 && sequence[j] > root)
j--;
for(int i = l; i <= j; ++i) // 注意取等,考虑没有左子树的情况
if(sequence[i] > root)
return false;
return check(sequence, l, j) && check(sequence, j + 1, r - 1);
}
public:
bool VerifySquenceOfBST(vector<int> sequence) {
// 想要去判断某个序列是否是二叉搜索树的后序遍历
// 后序 -> left right root
// 二叉搜索树 -> right > root > left
// 也就是问对于给定的序列,能否分成小 大 中这种形式
int n = sequence.size();
if(!n)
return false;
return check(sequence, 0, n - 1);
}
};
查看2道真题和解析