题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
解题思路
在二叉搜索树中,左子树所有结点的值均小于根结点,右子树所有结点的值均大于根结点,根据这一性质:
后序的二叉搜索树中,最后一个是根结点,从左边到小于根结点值得所有结点均为根结点的左子树,从该结点到根结点的所有结点为根的右子树。
因此我们可以将后序序列的最后一个值作为根结点,从而找出左子树和右子树,递归地使用这一过程判断左子树和右子树,最终便可以解决该问题。
代码实现
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty())return false;
return judge(sequence, 0, sequence.size());
}
bool judge(vector <int> arr,int s,int e){
if(s>=e)return true;
int i,j,root;
root=arr[e-1];
for(i=s;i<e-1;i++)if(arr[i]>root)break;
for(j=i;j<e-1;j++)if(arr[j]<root)return false;
return judge(arr,s,i)&&judge(arr,i,e-1);
}
};
运行时间:2ms
占用内存:376k