输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回
true,否则返回false。假设输入的数组的任意两个数字都互不相同。

解法一:分治递归解法
这里如果是后续遍历那么数组的最后一个元素一定是根节点。
bool recursion(vector<int> &postorder, int i ,int j) {
if(i >= j)
return true;
int p = i;
while(postorder[p] < postorder[j]) p++;
int m = p;
while(postorder[p] > postorder[j]) p++;
// 这里的条件中是怎么判断不匹配的呢?
return p == j && recursion(postorder, i, m - 1) && recursion(postorder, m, j - 1);
}
bool verifyPostorder(vector<int>& postorder) {
// 递归分治法求解
return recursion(postorder, 0, postorder.size() - 1);
}

533

被折叠的 条评论
为什么被折叠?



