#include<bits/stdc++.h>
#define N 40
using namespace std;
typedef char ElemType;
struct Node{
Node *right;
Node *left;
ElemType data;
};
typedef Node* BiTree;
void preTraver(BiTree &T)
{
if(T){
cout<<T->data<<" ";
preTraver(T->left);
preTraver(T->right);
}
}
void Match_BiTree(char s1[],char s2[],BiTree &T)
{
int len = strlen(s1),sum1 = 0,sum2,i,j;
//接收到本层的根节点
char root = s2[len - 1];
T = new Node;
T->data = root;
T->left = T->right = NULL;
//叶子节点
if(len == 1){
return;
}
//计算左树的元素数量
for(i=0;i<len;i++){
if(s1[i] != root)
sum1++;
else
break;
}
sum2 = len - sum1 - 1;
//将当前根节点的左树和右树分开
char leftMid[sum1],leftRear[sum1],rightMid[sum2],rightRear[sum2];
for(i=0;i<sum1;i++){
leftMid[i] = s1[i];
}
i++;
for(j=0;j<sum2;i++,j++){
rightMid[j] = s1[i];
}
for(i=0;i<sum1;i++){
leftRear[i] = s2[i];
}
for(j=0;j<sum2;i++,j++){
rightRear[j] = s2[i];
}
if(sum1>0)
Match_BiTree(leftMid,leftRear,T->left);
if(sum2>0)
Match_BiTree(rightMid,rightRear,T->right);
}
int main()
{
BiTree T;
char s1[N],s2[N];
cin>>s1>>s2;
Match_BiTree(s1,s2,T);
preTraver(T);
return 0;
}
可以参考一下
C++实现二叉树的先序、中序、后序遍历,包括递归方式和非递归 方式_alxe_made的博客-CSDN博客_c++二叉树的先序,中序,后序遍历
如有用请采纳