输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true,否则返回false。
假设输入的数组的任意两个数字都互不相同。
样例
输入:[4, 8, 6, 12, 16, 14, 10]
输出:true
思路:
二叉搜索书的特点是根节点值小于右子树值,大于左子树值。而后序遍历中最后一个节点为根节点,于是找到最后一个节点,然后确定左子树和右子树递归下去。
class Solution {
public:
bool verifySequenceOfBST(vector<int> sequence) {
int len = sequence.size();
return dfs(sequence,0,len - 1);
}
bool dfs(vector<int> sequence,int l,int r) {
if(l >= r) return true;
int x = sequence[r];
int pos = l;
for(int i = l;i <= r;i++) {
pos = i;
if(sequence[i] > x) {
break;
}
}
for(int i = pos;i < r;i++) if(sequence[i] < x) return false;
return dfs(sequence,l,pos - 1) && dfs(sequence,pos,r - 1);
}
};