判断数组是不是二叉搜索树后序遍历的前序遍历结果

继续二叉树,这个题考的知识点是二叉树的后续遍历
对于一个二叉树的后序遍历序列来说,最后一个数一定是根节点,然后前面的数中,从最开始到第一个大于根节点的数都是左子树中的数,而后面到倒数第二个数应该都是大于根节点的,是右子树,如果后面的数中有小于根节点的,那么说明这个序列不是二叉搜索树的后序遍历序列
同样是用递归去做,首先要考虑Corner Case,如果array为空,那么返回false
然后找到根节点,根节点是array最后一个数,从0开始找,找到第一个大于root的数
那么0到i-1的值就是左子树中的数
然后从i到array.length-2遍历,如果有小于root的数,那么这个序列肯定不是后序遍历序列
如果没有,那么i到array.length-2就是右子树中的数
那么就去看左子树中的子序列和右子树中的那些子序列是否满足条件
注意这里需要用到数组的复制函数,不然会出问题
public boolean verifySequenceOfBST(int[] array)
if(array==null || array.length&=0)
int root=array[array.length-1];
for(;i&array.length-1;++i)
if(array[i]&root)
for (;j & array.length-1; ++j) {
if (array[j]&root) {
boolean leftFlag=
if (i&0) {
leftFlag=verifySequenceOfBST(Arrays.copyOfRange(array,0,i));
boolean rightFlag=
if (i&array.length-1) {
rightFlag=verifySequenceOfBST(Arrays.copyOfRange(array,i,array.length-1));
return leftFlag&&rightF
阅读(...) 评论()1 /*************************************************************************
& File Name: 22_SequenceOfBST.cpp
& Author: Juntaran
& Created Time: 日 星期二 20时34分33秒
************************************************************************/
8 #include &stdio.h&
9 #include &stdlib.h&
11 // 判断一个数组是不是某个二叉搜索树的后序遍历
12 bool isSequenceOfBST(int* sequence, int length)
if (sequence==NULL || length&=0)
return false;
int root = sequence[length-1];
// 二叉搜索树的左子树都小于根
for (i = 0; i & length-1; ++i)
if (sequence[i] & root)
// 二叉搜索树的右子树都大于根
for (j = j & length-1; ++j)
if (sequence[j] & root)
return false;
// 递归判断左子树是不是二叉搜索树
bool left = true;
if (i & 0)
left = isSequenceOfBST(sequence, i);
// 递归判断右子树是不是二叉搜索树
bool right = true;
if (i & length-1)
right = isSequenceOfBST(sequence+i, length-i-1);
return (left && right);
48 int main()
int sequence1[] = {5,7,6,9,11,10,8};
int sequence2[] = {7,4,5,6};
bool ret1 = isSequenceOfBST(sequence1, 7);
bool ret2 = isSequenceOfBST(sequence2, 4);
if (ret1 == true)
printf("ret1 is true\n");
printf("ret1 is false\n");
if (ret2 == true)
printf("ret2 is true\n");
printf("ret2 is false\n");
阅读(...) 评论()匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。如何根据前序遍历序列和中序遍历序列确定二叉树
假设某二叉树的先序遍历序列是abdgcefh,中序遍历序列是dgbaechf,画出二叉树,并给出其后序遍历序列.以下面的例题为例进行讲已知一棵二叉树的先序遍历序列和中序遍历序列分别是abdgcefh、dgbaechf,求二叉树及后序遍历序列.分析:先序遍历序列的第一个字符为根结点.对于中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列.先序:abdgcefh --> a bdg cefh中序:dgbaechf --> dgb a echf得出结论:a是树根,a有左子树和右子树,左子树有bdg结点,右子树有cefh结点.先序:bdg --> b dg中序:dgb --> dg b得出结论:b是左子树的根结点,b无右子树,有左子树.先序:dg --> d g中序:dg --> d g得出结论:d是b的左子树的根结点,d无左子树,有右子树.先序:cefh --> c e fh中序:echf --> e c hf得出结论:c是右子树的根结点,c有左子树(只有e结点),有右子树(有fh结点).先序:fh --> f h中序:hf --> h f得出结论:f是c的左子树的根结点,f有左子树(只有h结点),无右子树.还原二叉树为:ab cd e fg h后序遍历序列:gdbehfca
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 前序遍历二叉搜索树 的文章

 

随机推荐