您的位置:首页 > 其它

二叉搜索树的后续遍历序列

2015-06-11 11:19 253 查看
题目:输入一个整数数组 判断该数组是不是某二叉搜索树的后续遍历结果 如果是则返回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
;
for(int i=0;i<n;i++)
cin>>A[i];

cout<<ispost(A,n)<<endl;
delete []A;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: