博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2013=12=2 bitree
阅读量:5854 次
发布时间:2019-06-19

本文共 2347 字,大约阅读时间需要 7 分钟。

#include "stdio.h"#include "stdlib.h"#define OVERFLOW -1#define ERROR -1#define OK 1typedef char Elemtype;typedef int Status;typedef struct BitNode{	Elemtype data;	struct BitNode *lchild,*rchild;}bitnode ,*Bitree;int postion(Elemtype ch,Elemtype a[],int start,int end){	int i;	for(i=start;i<=end;i++)		if (a[i]==ch)			return i;}Status creatbitree_TWOorder(Bitree &t,Elemtype preorder[],int startpre,int endpre, Elemtype inorder[],int startin ,int endin){	int pos,left,right;	if (endpre-startpre!=endin-startin)		return ERROR;	if(endpre-startpre<0)		t=NULL;	else	{	pos=postion(preorder[startpre],inorder,startin,endin);	left=pos-startin;	right=endin-pos;	printf("char=%c,pos=%d,left=%d,right=%d,--pre --- %d, %d --- in--- %d ,%d\n",preorder[startpre],pos,left,right,startpre,endpre,startin,endin);    //getchar();		if(!(t=(bitnode *)malloc(sizeof(Bitree))))  exit(OVERFLOW);		t->data=preorder[startpre];		creatbitree_TWOorder(t->lchild,preorder,startpre+1,left+startpre,inorder,startin,left+startin-1);		printf("====");    	creatbitree_TWOorder(t->rchild,preorder,endpre-right+1,endpre,inorder,pos+1,endin);	}}Status creatbitree(Bitree &t){	char ch;	scanf("%c",&ch);	if(ch==' ') t=NULL;	else	{		if(!(t=(bitnode *)malloc(sizeof(Bitree))))  exit(OVERFLOW);		t->data=ch;		creatbitree(t->lchild);		creatbitree(t->rchild);	}	return OK;}Status printelemt(Elemtype e){	printf("%c",e);	return OK;}Status preordertraverse(Bitree t,Status (*visit)(Elemtype e)){	if(t)	{		if(visit(t->data))			if(preordertraverse(t->lchild,visit))					if(preordertraverse(t->rchild,visit))  return OK;		return ERROR;	}	else 		return OK;}Status inordertraverse(Bitree t,Status (*visit)(Elemtype e)){	if(t)	{	    if(inordertraverse(t->lchild,visit))		    if(visit(t->data))				if(inordertraverse(t->rchild,visit))  return OK;		return ERROR;	}	else 		return OK;}Status postordertraverse(Bitree t,Status (*visit)(Elemtype e)){	if(t)	{	    if(postordertraverse(t->lchild,visit))			if(postordertraverse(t->rchild,visit))  						if(visit(t->data)) return OK;		return ERROR;	}	else 		return OK;}main(){	Bitree t;	char a[]="1245673";	char b[]="4265713";	creatbitree_TWOorder(t,a,0,6,b,0,6);	preordertraverse(t,printelemt);	printf("\n");	inordertraverse(t,printelemt);	printf("\n");	postordertraverse(t,printelemt);	printf("\n");}

 

转载于:https://www.cnblogs.com/wc1903036673/p/3453553.html

你可能感兴趣的文章
Akka actor tell, ask 函数的实现
查看>>
NodeJS的底层通信
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Java 免费!亚马逊开源 Java SE 发行版的直接替代品 Corretto
查看>>
Hello , Ruby!
查看>>
navigator 应用
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
go与c互相调用
查看>>
如何优雅地用Redis实现分布式锁
查看>>
程序员的4条忠告,你做到了几条
查看>>
从零开始Docker化你的Node.js应用
查看>>
mybatis模糊查询
查看>>
你真的需要活动目录吗?
查看>>
Linux 新增一块硬盘,添加到已有逻辑卷
查看>>
【Linux系统】模拟MBR扇区故障与恢复 (转)
查看>>
简单mdadm操作实例
查看>>
OpenCV成长之路:直线、轮廓的提取与描述
查看>>
django URLconf学习
查看>>
Python自动化开发学习1-2
查看>>