描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树)
示例1
输入:
[4,8,6,12,16,14,10]
返回值:
true
主要是找到左子树和右子树的分界点,多加一个判断右子树有没有小于根节点的操作。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if (sequence.empty()) {
return false;
}
return isBST(sequence, 0, sequence.size() - 1);
}
bool isBST(vector<int> &sequence,int nleft, int nright) {
if (nleft >= nright) {
return true;
}
//int nlength = sequence.size() - 1;
int node = 0;
while( sequence[node] < sequence[nright] ) {
node++;
}
int nleftleft = nleft;
int nleftright = node - 1;
int nrightleft = node;
int nrightright = nright - 1;
for(int i = node; i < nright; i++) { // 判断右子树有没有小于根节点的操作。
if (sequence[i] <= sequence[nright]) {
return false;
}
}
return isBST(sequence, nleftleft, nleftright) && isBST(sequence, nrightleft, nrightright);
}
};