问题
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
思路
通过本题可以得出
先序遍历、中序遍历、后序遍历对于叶子节点的访问都是从左到右
后序遍历可以看作 根右子树左子树顺序遍历,然后反过来
二叉搜索树给定后续遍历序列,可以确定二叉树
利用该性质可以解决本题
代码
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
return dfs(postorder,0,postorder.size()-1);
}
bool dfs(vector<int>& postorder,int i,int j){
if(i>=j){
return true;
}
int p=i;
while(postorder[p]<postorder[j])
p++;
int t=p;
while(postorder[p]>postorder[j])
p++;
return p==j&&dfs(postorder,i,t-1)&&dfs(postorder,t,j-1);
}
};