在写这篇文章前,我在csdn里看了很多博文,看了很多大佬写的程序可谓是看的我眼花缭乱。先序和中序遍历确立一棵树是考验树的组织结构是否真正能写出。
本次代码其实也分为四个部分
- 找寻根节点
- 后序遍历
- 利用根节点创建树
- 主函数
希望大家牢记,过程性编程语言只需要输入+处理+输出搞搞好就行了!各位加油!
忘了说了,测试案例输入
先序输入
abdfecghi
中序输入
dbefaghci
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int N = 1000;
typedef struct Node *BNode;
typedef BNode BinTree;
struct Node{
char data;
BinTree lChild;
BinTree rChild;
};
void postOrder(BinTree root)
{
if(root==NULL)
{
return ;
}
postOrder(root->lChild);
postOrder(root->rChild);
printf("%c ",root->data);
}
int search(int num,char *in,int len)
{
for(int i=0;i<len;i++)
if(in[i]==num)
return i;
return -1;
}
BNode msn(char *pre,char *in,int len)
{
if(len<=0)
return NULL;
BinTree root=(BNode )malloc(sizeof(struct Node));
int index = search(*pre,in,len);
root->data = *pre;
root->lChild = msn(pre+1,in,index);
root->rChild = msn(pre+index+1,in+index+1,len-index-1);
return root;
}
int main()
{
char pre[N];
char in[N];
//freopen("C:\\Users\\Administrator\\Desktop\\test.txt","r",stdin);
printf("pre oder input:\n");
scanf("%s",pre);
printf("in oder inout:\n");
scanf("%s",in);
BinTree root = msn(pre,in,strlen(in));
postOrder(root);
return 0;
}