⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4-1.c

📁 《数据结构-使用C语言》第三版
💻 C
字号:
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>

#define Max 15
typedef char DataType;
void Visit(DataType item)
{
	printf("%c",item);
}

#include"BiTreeNode.h"

int len, lena, flag[Max];
DataType pre[Max], mid[Max];

int main()
{
	void Creat(BiTreeNode *t, int low, int high, int f);
	while(1)
	{
		gets(pre);
		gets(mid);
		BiTreeNode *root;
		Initiate(&root);
		
		len=strlen(pre);
		lena=strlen(mid);
		memset(flag, 0, sizeof(flag));
		
		if(len!=lena)
		{
			printf("error!\n");
			continue;
		}
		
		Creat(root, 0, len-1, 0);
		
		printf("\n前序遍历:\n");
		PreOrder(root->leftChild, Visit);
	
		printf("\n中序遍历:\n");
		InOrder(root->leftChild, Visit);
	
		printf("\n后序遍历:\n");
		PostOrder(root->leftChild, Visit);
		printf("\n\n");
	
		Destroy(&root);
		//getchar();
	}
}

void Creat(BiTreeNode *t, int low, int high, int f)
{
	int i, j, k, cin_left, cin_right;
	BiTreeNode *p;
	
	if(low>high)return ;
	
	if(f==0)p=InsertLeftNode(t, pre[low]);
	else p=InsertRightNode(t, pre[low]);
	
	if(low==high)return ;
	
	for(i=0; i<len; i++)
		if(mid[i]==pre[low])break;
	
	flag[i]=1;
	cin_left=0;
	cin_right=0;
	
	for(j=0;j<i;j++)  //寻找pre[low]左支上的节点个数 
	{
		if(flag[j])continue;
		for(k=low; k<=high; k++)
		if(pre[k]==mid[j])
		{
			cin_left++;
			break;
		}
	}

	/*for(j=i+1;j<len;j++)
	{
		if(flag[j])continue;
		for(k=low; k<=high; k++)
		if(pre[k]==mid[j])cin_right++;
	}*/

	Creat(p, low+1, low+cin_left, 0);
	Creat(p, low+cin_left+1, high, 1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -