暂存。。

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char zhong[1000];
char hou[1000];
int len;
char print[1000][1000];
char ptop[1000];

struct treenode {
	int top;
	char stack[1000];
	struct treenode *lchild;
	struct treenode *rchild;
};

struct treenode * create(struct treenode *t) {
	if(t->top==1) {
		t->lchild=NULL;
		t->rchild=NULL;
	}
	else if(t->top==0) t=NULL;
	else {
		char zuo[1000];
		char you[1000];
		int find=-1;
		for (int i=len-1; i>=0; --i) {
			for (int j=0; j<t->top; ++j) {
				if(hou[i]==t->stack[j]) {
					find=j;
					break;
				}
			}
			if(find!=-1) break;
		}
		if(find==-1) return t;
		//printf("%d\n",find);
		int k=0;
		for (int i=0; i<find; i++) {
			zuo[k++]=t->stack[i];
		}
		zuo[k]='\0';
		k=0;
		for (int i=find+1; i<t->top; ++i) {
			you[k++]=t->stack[i];
		}
		you[k]='\0';
		t->lchild=(struct treenode *)malloc(sizeof(struct treenode));
		t->rchild=(struct treenode *)malloc(sizeof(struct treenode));
		strcpy(t->lchild->stack,zuo);
		strcpy(t->rchild->stack,you);
		t->lchild->top=strlen(t->lchild->stack);
		t->rchild->top=strlen(t->rchild->stack);
		//puts(zuo);
		//puts(you);
		t->lchild=create(t->lchild);
		t->rchild=create(t->rchild);
		t->top=1;
		t->stack[0]=t->stack[find];
		t->stack[1]='\0';
	}
	return t;
}

void cengprinttree(struct treenode *t,int ceng) {
	if(t==NULL) return;
	if(t->stack[0]!='\0')
		print[ceng][ptop[ceng]++]=t->stack[0];
	//printf("%c\n",t->stack[0]);
	cengprinttree(t->lchild,ceng+1);
	cengprinttree(t->rchild,ceng+1);
	return;
}

void printa() {
	for (int i=0; print[i][0]!='\0'; i++) {
		printf("%s",print[i]);
	}
	putchar('\n');
}

int main() {
	memset(print,0,sizeof(print));
	memset(ptop,0,sizeof(ptop));
	gets(zhong);
	gets(hou);
	len=strlen(zhong);
	struct treenode *head;
	head=(struct treenode *)malloc(sizeof(struct treenode));
	strcpy(head->stack,zhong);
	head->top=strlen(head->stack);
	head=create(head);
	cengprinttree(head,0);
	printa();
}

  

 

posted on 2011-11-03 00:14  Eucalyptus  阅读(217)  评论(0编辑  收藏  举报