题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
题解:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence)
{
int n = sequence.size();
if(n == 0)
return false;
return isBst(sequence,0,n-1);
}
bool isBst(vector<int> sqe,int start,int end)
{
if(start >= end)
return true;
int mid = start;
int rootval = sqe[end];
while(sqe[mid] < rootval)
++mid;
for(int i= mid;i<end;++i)
{
if(sqe[i] < rootval)
return false;
}
return isBst(sqe,start,mid-1) && isBst(sqe,mid,end-1);
}
};
解题思路:
(1)寻找根节点
(2)寻找左子树的位置
(3)判断右子树是不是都大于根节点
(4)左右子树递归