输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意俩个数字都互不相同
思路:后序遍历得到的序列中,最后一个数字是树的根节点的值,数组中前面的数字可以分为俩部分 第一部分是左子树节点的值,它们都比根节点的值小 第二部分是右子树节点的值,它们都比根节点大
#include <stdio.h>
#include <iostream>
using namespace std;
//判断此数组是不是某二叉树搜索树的后序遍历的结果
bool VerifySquenceOfBST(int sequence[],int length) //参数1是该数组 参数2是数组的大小
{
if(sequence==NULL || length<=0)
return false;
int root=sequence[length-1]; //根据二叉搜索树后序遍历的性质,数组最后一个数为树的根
//先找到数组中的左右子树分界点 因为搜索树中根的左子树都小于根,右子树都大于根
int i=0;
for(;i<length-1;++i)
{
if(sequence[i]>root)
break; //发生break处的位置的i值就是第一个右子节点出现的位置
}
int j=i;
for(;j<length-1;++j) //判断数组对应的右子树中的节点是否都大于根节点
{
if(sequence[j]<root)
return false;
}
//判断左子树是不是二叉搜索树
bool left=true;
if(i>0)
left=VerifySquenceOfBST(sequence,i);
//判断右子树是不是二叉搜索树
bool right=true;
if(i<length-1)
right=VerifySquenceOfBST(sequence+i,length-i-1);
return (left && right);
}
int main()
{
int array[]={5,7,6,9,11,10,8};
if(VerifySquenceOfBST(array,sizeof(array)/sizeof(array[0])))
cout<<"It is an Binary search tree"<<endl;
else
cout<<"It is not an Binary search tree"<<endl;
return 0;
}