您的位置:首页 > 其它

9.判断整数序列是不是二元查找树的后序遍历结果

2014-12-22 15:18 369 查看
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11

因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

分析:对于每一棵二叉树,后序遍历中根节点是最后遍历的,对于左子树比根节点小,所以先把左子树抽取出来,然后判断剩下的节点值是否都大于根节点,然后递归判断即可。

代码实现:

#include<iostream>

using namespace std;

bool isSquenceOfBST(int sequence[],int length)
{
if(sequence==NULL||length<=0)//考虑比较全面
return false;
int root=sequence[length-1];
int i=0,j;
while(sequence[i]<root) ++i;
for(j=i;j<length-1;++j)
{
if(sequence[j]<=root)
return false;
}
bool left=true,right=true;
if(i>0)
left=isSquenceOfBST(sequence,i);
if(i<length-1)
right=isSquenceOfBST(sequence+i,length-1-i);
return left&&right;
}

int main()
{
int a[10005],n;
while(cin>>n)
{
for(int i=0;i<n;i++)
cin>>a[i];
if(isSquenceOfBST(a,n))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐