(c语言)先序加中序确定一棵树(包括测试用例)

在写这篇文章前,我在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;
}
发布了63 篇原创文章 · 获赞 2 · 访问量 1438

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/105141485
今日推荐