题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
① 获取数组的最后一个值;
② 从头遍历数组,把小于该值的放进一个新的数组,判断左数组是不是后序遍历;
③ 当遇到大于该值的数字,就放进另一个新的数组,判断右数组是不是后序遍历;
④ 如果没遍历完,说明不是,如果左右都是,则返回true。
卡在了两个地方:
① 当输入空的时候要返回false,我一直以为是true呢
② 忘了写一个return了,折腾我好久才发现,以后一定记得记得呀
class Solution {
public:
bool verifing(vector<int> sequence)
{
if(sequence.size() <= 1)
return true;
int i = 0;
vector<int> left;
vector<int> right;
while(sequence[i] < sequence[sequence.size()-1] && i < sequence.size()-1)
{
left.push_back(sequence[i]);
i++;
}
while(sequence[i] > sequence[sequence.size()-1] && i < sequence.size()-1)
{
right.push_back(sequence[i]);
i++;
}
if(i != sequence.size()-1)
return false;
else
return verifing(left) && verifing(right);
return true;
}
bool VerifySquenceOfBST(vector<int> sequence)
{
if(sequence.size() == 0)
return false;
return verifing(sequence);
}
};