学数据结构不写代码的孩子,不是好孩子!
在创建树的过程中,并用先序把树遍历了一遍,因此只用了两个函数。我知道会有不少人问,如何找寻根节点,其实想啊,中序遍历加后序遍历,其中后序遍历最后遍历根节点,那么根据这一特性就可以取出根节点咯!
中序遍历输入:
cdebahgijf
后序遍历输入:
cedbhjigfa
//中序+后序遍历确立一棵树
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//建造树并遍历进行验证.
void BinaryTreeFromOrderings(char *mid,char *last,int len)
{
if(len==0)
{
return;
}
BiTree node = (BiTree)malloc(sizeof(BiTNode));
node->data = last[len-1];
int rootIndex = 0;
for(;rootIndex<len;rootIndex++)
{
if(mid[rootIndex]==last[len-1])
break;
}
printf("%c",node->data);
BinaryTreeFromOrderings(mid,last,rootIndex);
BinaryTreeFromOrderings(mid+rootIndex+1,last+rootIndex,len-(rootIndex+1));
return ;
}
int main()
{
char mid[100],last[100],len;
//freopen("C:\\Users\\Administrator\\Desktop\\test.txt","r",stdin);
printf("zhong xu bian li input:\n");
scanf("%s",mid);
printf("hou xu bian li input:\n");
scanf("%s",last);
len=(int)strlen(mid);
BinaryTreeFromOrderings(mid,last,len);
printf("\n");
}