题解 | #二叉搜索树的后序遍历序列#
二叉搜索树的后序遍历序列
http://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd
判断是否后序遍历
情况:
全右子树
全左子树
左右子树
右左子树(此时不是后序遍历false)
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0)return false;
if(sequence.size() <= 2)return true;
int n = sequence.size();//要么全左子树,要么全右,要么左右。
int ans = sequence[n-1];//根节点
int k = 0;
bool flag = false;
for(int i = 0;i < n;++i){
if(sequence[i] < ans)
k = i;
if(ans < sequence[i])
flag = true;
if(flag && ans > sequence[i])
return false;//右左穿插,直接返回
}
vector<int> sequenceleft(sequence.begin(),sequence.begin()+k+1);
vector<int> sequenceright(sequence.begin()+k+1,sequence.end()-1);
bool f = false;
if(sequenceleft.size())//空树为false,判断,此时空树应该为真所以非空再递归
f = VerifySquenceOfBST(sequenceleft);
if(sequenceright.size())
f = f && VerifySquenceOfBST(sequenceright);
return f;
}
};