描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
示例 1:
输入: [1,6,3,2,5] 输出: false
示例 2:
输入: [1,3,2,6,5] 输出: true
题解
这道题的具体解法,可参看 这个B站视频
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
if(postorder.empty()) return true;
return dfs(postorder, 0, postorder.size() - 1);
}
bool dfs(vector<int>& postorder, int l, int r) {
if(l >= r) return true;
int p = l;
while(postorder[p] < postorder[r]) p++;
int m = p; // 此时的postorder[p]大于postorder[r], [l, m - 1]是左子树
while(postorder[p] > postorder[r]) p++;
return p == r && dfs(postorder, l, m - 1) && dfs(postorder, m, r - 1);
}
};