{
int i
for (i=0i<li++)
{
if (b[i] == a[0])
break
}
if (l == i)
return 0
pp(a+1, b, i)
pp(a+i+1, b+i+1, l-i-1)
printf("%c", b[i])
return 0
}
int main()
{
char a[32]
char b[32]
int l
printf("请输入前序、中序遍历结果:")
scanf("%s %s", a, b)
l = strlen(b)
if (l != strlen(a))
return 1
printf("后序遍历结果是:")
pp(a, b, l)
printf("\n")
return 0
}
对于你的这种情况我觉得比较适合用数组来实现。对于长度为t的输入,申请类型为Node、长度为t的数组nodeArray[t],然后进行两次遍历。第一次,nodeArray[i].data对应输入的第i个字符,nodeArray[i].lchild和rchild都为空;(如果输入#则nodeArray[i]=null)
第二次,在[0, n-1]的范围内,令nodeArray[i].lchild = &(nodeArray[i * 2]),nodeArray[i].rchild = &(nodeArray[i * 2 + 1])。
完成后,nodeArray[0]即为所求二叉树。
应该有办法一次遍历就构造好这棵树,懒得想了。