您的位置:首页 > 其它

给定一颗二叉树的前序序列,求所有可能的中序序列

2012-08-07 10:22 239 查看
前两天在复习数据结构二叉树部分的时候,看到当初在书上写的一个问题:怎么能找出和一个前序序列对应的所有可能的中序序列,问题末尾有一个大大的问号,想必当时自己肯定没想明白。今天重新想了一下,这个问题相当于求一个给定入栈序列所有可能的出栈序列,用回溯的方法来做。

算法的基本思想:模拟一系列入栈出栈的过程,对于每一步操作,可能是入栈,也可能是出栈;如果所有元素都已入栈,那就将栈中元素都弹出,这就找到一个中序序列。

代码如下:

/*
* root是前序序列,l表示入栈的第几个字符,stack,top不用说了,inTree用来保存当前得到的中序序列
*/
void inorderTrees(char *root, int l, char *stack, int top, char *inTree, int k)
{

if(l == strlen(root))
{
int i;
for(i = 0; i < k; ++i)
printf("%c", inTree[i]);
for(i = top - 1; i >= 0; --i)
printf("%c", stack[i]);
printf("\n");
}
else
{
stack[top] = root[l];
inorderTrees(root, l+1, stack, top+1, inTree, k);
if(top > 0)
{
--top;
int temp = stack[top];
inTree[k] = stack[top];
inorderTrees(root, l, stack, top, inTree, k+1);
//记得恢复栈顶啊亲~
       stack[top] = temp;
}
}
}


int main()
{
char *tree = "123";
char *s = (char *)malloc(sizeof(char)*(strlen(tree)+1));
char *inTree = (char *)malloc(sizeof(char)*(strlen(tree)+1));
inorderTrees(tree, 0, s, 0, inTree, 0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐