笑看风云起的专栏

岁月沉积后、蓦然回首:原来不经意之间的印痕也是一种美丽!

扩展二叉树

Problem Description

由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。现给出扩展二叉树的先序序列,要求输出其中序和后序序列。

Input

输入有多组数据,对于每组数据就一行为扩展二叉树序列(序列长度不超过50)。

Output

对于每组输入输出两行,分别是该二叉树的中序和后序序列。

Sample Input

ABD..EF..G..C..

Sample Output

DBFEGAC
DFGEBCA
//解题报告:二叉树的建立与遍历。
//标程:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct btnode  
{
	char data;
	struct btnode *lchild,*rchild;
}NODE;
char s[100];
int i;
NODE *creat(NODE *p)
{
	NODE *t;
	if(s[++i]=='.') p=NULL;
	else 
	{
		p->data=s[i];
		t=(NODE *) malloc (sizeof(NODE));
		p->lchild=creat(t);
		t=(NODE *) malloc (sizeof(NODE));
		p->rchild=creat(t);
	}
	return p;
}
void inorder(NODE *root)
{
	if(root!=NULL)
	{
		inorder(root->lchild);
		printf("%c",root->data);
		inorder(root->rchild);
	}
	return ;
}
void postorder(NODE *root)
{
   if(root!=NULL)
   {
	   postorder(root->lchild);
	   postorder(root->rchild);
	   printf("%c",root->data);
   }
   return ;
}
int main()
{
    //freopen("a.txt","r",stdin);
	while(scanf("%s",s)!=EOF)
	{
		i=-1;
        NODE *root,*q,n;
        q=&n;
		root=creat(q);
		inorder(root);
		printf("\n");
		postorder(root);
		printf("\n");
	}
	return 0;
}

阅读更多
个人分类: 数据结构
想对作者说点什么? 我来说一句

按先序扩展序列建立二叉树

2008年09月17日 166KB 下载

没有更多推荐了,返回首页

不良信息举报

扩展二叉树

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭