/*
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
*/
class Solution {
public:
// seperate into two parts by the last element of sequence
// then recursively judge
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0) return false ;
if(sequence.size() == 1) return true ;
return DoIt(sequence) ;
}
bool DoIt(std::vector<int>& sequence) {
if(sequence.size() == 0) return true ;
if(sequence.size() == 1) return true ;
std::vector<int> leftSeq ;
std::vector<int> rightSeq ;
bool bRight = false ;
for(std::size_t i = 0; i < sequence.size() - 1; ++i) { // i < sequence.size() - 1
if(bRight == false) {
if(sequence[i] < sequence[sequence.size() - 1]) {
leftSeq.push_back(sequence[i]) ;
}else {// do not have the condition == because the subject declared that
bRight = true ;
rightSeq.push_back(sequence[i]) ;
}
}else {
if(sequence[i] > sequence[sequence.size() - 1]) {
rightSeq.push_back(sequence[i]) ;
}else {// do not have the condition == because the subject declared that
return false ;
}
}
}
bool bRet = DoIt(leftSeq) ;
if(bRet) {
return DoIt(rightSeq) ;
}else {
return false ;
}
}
};
二叉搜索树的后序遍历序列
最新推荐文章于 2023-03-19 11:29:26 发布