解题思路:递归,通过中序和后序推出先序。
参考代码:
//后序排列最后一个一定是根节点
//从中序排列中找出根,前半段是左子树,后半段右子树
//后序排列中最后一个能找到的子树中有的字母是子树的根(也有可能是整棵树)
#include<stdio.h>
#include<string.h>
char a[100]/*存中序*/, b[100]/*存后序*/;
void tree(int d, int e)//递归
{
int i, f, c, j;
c = 0;//c归零
if (d > e) return;//查找范围为d-e(一颗树),范围中没东西了就结束查找
for (j = strlen(a) - 1; j >= 0; j--)//倒着找,以便找出最后一个
{
for (i = d; i <= e; i++)//遍历整棵树
{
if (a[i] == b[j])//找到了就记录并结束查找
{
c = i;//24~27行c变动的缘由
break;
}
}
if (c)//c有变动,退出循环(没变动说明没找到或者最后才找到)
{
break;
}
}
printf("%c", a[c]);//输出根
tree(d, c - 1);//先对左子树使用函数
tree(c + 1, e);//再对右子树使用函数
}
int main()
{
int i, c;
scanf("%s %s", a, b);
tree(0, strlen(a) - 1);//调用函数
}
0.0分
2 人评分
2005年春浙江省计算机等级考试二级C 编程题(3),复杂度最低的方法没有之一!!!!!浏览:856 |
程序员的表白 (C语言代码)浏览:1575 |
震宇大神的杀毒软件 (C++代码)浏览:1173 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:644 |
【计算两点间的距离】 (C语言代码)浏览:927 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:588 |
C语言训练-自由落体问题 (C语言代码)浏览:650 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:388 |
1157题解浏览:769 |
核桃的数量 (C语言代码)浏览:726 |