输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
class Solution {
public:
bool judge(vector<int>se,int start,int end)
{
//循环遍历找二叉树的第一个右节点
int position;//定位点
if( start>end) return true;//遍历完成一遍
for(int i=0;i<end;i++)
{
if(se[i]>se[end])
{
position=i;
break;
}
}
for(int j=position;j<end;j++)
{
if(se[j]<se[end])
return false;
}
return judge(se, start,position-1)&&judge(se,position,end-1);
}
bool VerifySquenceOfBST(vector<int> sequence) {
//后序遍历的顺序为左右根,数组最后一个元素为根节点
//二叉搜索树的规律,空二叉树是二叉搜索树
//左<根<右
//找到左右节点的边界即右子树的第一个节点
//遍历右子树后的元素,看后边的节点是否都大于根节点,否则则为为假
vector<int> se=sequence;
if(!sequence.data()) return false;//此处证明空
//递归
return judge(se,0,se.size()-1);//循环遍历整个二叉搜索树的数组,判断
}
};