题目:输入一个整数数组 判断该数组是不是某二叉搜索树的后续遍历结果 如果是则返回true 否咋返回false 假设输入数字的任意两个数字都互不相同
后序遍历是左->右->根 左<根<右
数组最后一个值t为根结点的值
数组中小于t的为树的左孩子 之后的应当为右孩子 且所有的右孩子大于根t 若存在不大于t的值 则表明不是二叉搜索树的后序遍历顺序
然后递归判断左孩子和右孩子是否为二叉搜索树
递归遍历结束条件是 遍历到叶节点~
#include <iostream>
using namespace std;
//struct BinaryTreeNode
//{
// int m_nValue;
// BinaryTreeNode *m_pLeft;
// BinaryTreeNode *m_pRight;
//};
bool ispost(int *A,int n)
{
//
int i=0;
int j=0;
if(n<=1)
return true;
int t=A[n-1];
while(t>A[i])
i++;
j=i;
while(i<n-1)
{
if(t>A[i])
return false;
i++;
}
return ispost(A,j)&&ispost(A+j,n-1-j);
}
int main()
{
int n;
cin>>n;
int *A=new int[n];
for(int i=0;i<n;i++)
cin>>A[i];
cout<<ispost(A,n)<<endl;
delete []A;
return 0;
}