您的位置:首页 > 其它

每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果

2015-05-21 11:26 239 查看
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。

例如 输入5、7、6、9、11、10、8     true
输入7、4、6、5                      false


1.思路

二叉查找树:左右子树均为二叉查找树,在此基础上,左子树的最大值(即最右节点)小于和右子树的最小值(即最左节点)大于根节点。

1)使用递归。结束条件,仅有<=2个节点的序列一定是查找树。
2)以小于根节点的第一个节点作为左子树的根节点,划分左右子树。递归判断子树是否为查找树。
3)在此条件上,满足左子树最大值仍小于根节点值(步骤2中,保证右子树全部大于根节点,故右子树的最小值情况不用判断)


2.程序

bool verify(int *data,int length){//length为序列长度
if(length<=2)
return true;
else{

bool left=false,right=false;

int j=length-2;
int* root=data+length-1;
for(;j>=0&&*(data+j)>*root;j--);

left=verify(data,j+1);
right=verify(data+j+1,length-j-2);

if(left&&right&&(j<=0||*(data+j-1)<*root))//左子树仅有1个点或者没有节点的情况,不用判断左子树的最小值
return true;

}
return false;
}


sizeof此时可用来判断数组的长度。
int data[]={7,4,6,5};
bool flag=verify(data,sizeof(data)/sizeof(int));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐