版权声明:iQXQZX https://blog.csdn.net/Cherishlife_/article/details/84976746
关于二叉树:
二叉树之由 中序、后序推前序:
char s1[100], s2[100], ans[100];
int cnt;
/*以上为全局变量*/
void make(int len, char *s1, char *s2) // 中序、后序 推前序 s1中序s2后序
{
if (len <= 0)
return;
int i = strchr(s1, s2[len - 1]) - s1; // 从s1中搜索s2[len-1] 并返回地址,地址减去首地址即为子树长度
ans[cnt++] = s2[len - 1];
make(i, s1, s2); // 递归搜索左子树
make(len - i - 1, s1 + i + 1, s2 + i); //递归搜素右子树 存到地址之后
}
// ans为目的串
二叉树之由 前序、中序推前序:
char s1[100], s2[100], ans[100];
int cnt;
/*以上为全局变量*/
void make(int len, char *s1, char *s2, char *s) // 先序、中序推后序 s1为先序 s2为中序
{
int i;
if (len <= 0)
return; // return 必不可少 否则死循环
else
{
for (i = 0; i < len; i++)
{
if (s1[0] == s2[i]) // 在中序中搜索根节点 实现递归
break;
}
}
// 关键部分
make(i, s1 + 1, s2, ans); // 搜索上次搜索左侧部分
make(len - i - 1, s1 + i + 1, s2 + i + 1, ans + i); // 搜索上次搜索右侧部分
ans[len - 1] = s1[0]; // 后序输出 把递归找出的根节点从后存入
}
// ans为目的串