数据结构二叉树顺序存储结构的创建和遍历

本文介绍了一种使用字符数组实现顺序树的方法,并详细解释了先序、中序和后序遍历的过程。通过输入特定格式的数据,可以创建顺序树并进行不同方式的遍历,展示树的结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建顺序树
//创建树
void createTree(char *data){
	int n = 1;
	char d;
	printf("请输入顺序树,空格代表该位置没有元素,\n 回车结束结束输入\n"); 
	while((d=getchar())!='\n'&&d!=EOF){
		if(n>MaxSize){
			printf("输入有误,请仔细检查后输入\n");
			n = 1;
		}
		if(d==' ');
		else
			data[n] = d;
		n++;
	}
	printf("总共有%d个结点\n",n-2); 
}
先序
//先序		中-左-右
void preorder(char *data,int n){
	if(n<MaxSize){
		if(data[n]!='\0') 
			printf("%c",data[n]);
		preorder(data,2*n);
		preorder(data,2*n+1);
	}
} 
中序
//中序		左-中-右
void inorder(char *data,int n){
	if(n<MaxSize){
		inorder(data,2*n);
		if(data[n]!='\0') 
			printf("%c",data[n]);
		inorder(data,2*n+1);
	}
}
后序
//后序		左-右-中
void postorder(char *data,int n){
	if(n<MaxSize){
		postorder(data,2*n);
		postorder(data,2*n+1);
		if(data[n]!='\0') 
			printf("%c",data[n]);
	}
} 
总程序
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 16
char data[MaxSize] = {'\0'};//声明一个数组值全为空 

void createTree(char *data);
void preorder(char *data,int n);
void inorder(char *data,int n);
void postorder(char *data,int n);
//主函数 
int main(){
	createTree(data);
	printf("先序遍历:");
	preorder(data,1);
	printf("\n");
	printf("中序遍历:");
	inorder(data,1);
	printf("\n");
	printf("后序遍历:");
	postorder(data,1);
	printf("\n");
	return 1;
}

//创建树
void createTree(char *data){
	int n = 1;
	char d;
	printf("请输入顺序树,空格代表该位置没有元素,\n 回车结束结束输入\n"); 
	while((d=getchar())!='\n'&&d!=EOF){
		if(n>MaxSize){
			printf("输入有误,请仔细检查后输入\n");
			n = 1;
		}
		if(d==' ');
		else
			data[n] = d;
		n++;
	}
	printf("总共有%d个结点\n",n-2); 
}

//先序		中-左-右
void preorder(char *data,int n){
	if(n<MaxSize){
		if(data[n]!='\0') 
			printf("%c",data[n]);
		preorder(data,2*n);
		preorder(data,2*n+1);
	}
} 

//中序		左-中-右
void inorder(char *data,int n){
	if(n<MaxSize){
		inorder(data,2*n);
		if(data[n]!='\0') 
			printf("%c",data[n]);
		inorder(data,2*n+1);
	}
}

//后序		左-右-中
void postorder(char *data,int n){
	if(n<MaxSize){
		postorder(data,2*n);
		postorder(data,2*n+1);
		if(data[n]!='\0') 
			printf("%c",data[n]);
	}
} 

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值