总结
- 注意边界条件,特别是递归
剑指 Offer 33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:
5
/ \
2 6
/ \
1 3
示例 1:
输入: [1,6,3,2,5]
输出: false
示例 2:
输入: [1,3,2,6,5]
输出: true
class Soluti
on {
public:
bool verifyPostorder(vector<int>& postorder) {
int n=postorder.size();
if(n==1||n==0)return 1;
vector<int> pre;
vector<int> next;
int i=0;
for(;i<n-1;i++){
if(postorder[i]<postorder[n-1])pre.emplace_back(postorder[i]);
else {
break;
}
}
for(;i<n-1;i++){
if(postorder[i]>postorder[n-1])next.emplace_back(postorder[i]);
else {
return false;
}
}
return verifyPostorder(pre)&verifyPostorder(next);
}
};
- 思路:搜索树就是该节点左子树比它小,右子树比它大。后序遍历则是该节点最后输出。所以前面输出的左边比它小,右边比它大。然后递归
- 注意边界条件
n==1 || n==0