在牛客上刷题,突然看到一个题
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
本来普通的思路都是分而治之,递归啥的,突然看到一个特别简洁的代码
链接:https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd
来源:牛客网
bool VerifySquenceOfBST(vector<int> sequence) {
int n=sequence.size();
int i=0;
if (n==0) {
return false;
}
while (--n) {
while(sequence[i]<sequence[n]) i++;
while (sequence[i]>sequence[n]) i++;
if (i<n) return false;
i=0;
}
return true;
}
哇,忍不住赞叹,然后记录下来,果然算法博大精深
顺便,后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。