例如{5,7,6,9,11,10,8};
根据最后一个元素为根节点,二叉搜索树的左子节点比根节点小{5,7,6},右子节点比根节点大{9,11,10},依照这个规律,可进行一步步的分析
class Solution
{
public:
bool verifyPostorder(vector<int>& postorder)
{
if(postorder.size()==0)return true;
return _verifyPostorder(postorder.begin(),postorder.size());
}
bool _verifyPostorder(vector<int>::iterator ite,int length)
{
int i=0,root=ite[length-1];
for(;i<length-1;++i)
{//找到根节分界位置就break
if(ite[i]>root)
{
break;
}
}
int j=i;
for(;j<length-1;++j)
{//判断根节点的右边是不是还有比根节点小的,如果有小的,直接返回false
if(ite[j]<root)
{
return false;
}
}
bool left=true;
if(i>0)
{//左子树的递归判断
left=_verifyPostorder(ite,i);
}
bool right=true;
if(i<length-1)
{//右子树的递归判断
right=_verifyPostorder(ite+i,length-i-1);
}
return (left&&right);
}
};