题目大意就是给出你一个二叉树的前序和中序,要你求后序。
思路:二叉树的排序就是根据根节点的位置来定义的。所以找到二叉树的根节点是最重要的,二叉树的左子树和右子树也可以看成是二叉树,以此递归;
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 typedef struct Node{ 5 char ch; 6 struct Node *left; 7 struct Node *right; 8 }Node; 9 char mid[27],pre[27];//pre用来存放前序 mid用来存放中序 10 int n=-1; 11 void make_tree(int i,int j){//递归构造树,最重要的是找到根节点,再分别对左子树和右子树进行递归; 12 int k; 13 if(i>j) return; 14 n++; 15 for(k=i;k<=j;k++){ 16 if(pre[n]==mid[k]) break; 17 } 18 make_tree(i,k-1); 19 make_tree(k+1,j); 20 printf("%c",mid[k]); 21 /* 22 如果是求前序 23 prinf("%c",mid[k]); 24 make_tree(i,k-1); 25 make_tree(k+1,j); 26 */ 27 } 28 int main(){ 29 int i,j,k; 30 while(scanf("%s%s",pre,mid)==2){ 31 make_tree(0,strlen(pre)-1); 32 printf(" "); 33 n=-1; 34 } 35 return 0; 36 }
//参考博客http://blog.csdn.net/cbs612537/article/details/8530294