二叉链表

博主运行博客中的代码,亲测实用且未改动。运行时创建二叉链表有输入注意事项,约定空格为NULL孩子结点,以前序遍历形式创建,如输入“ABC D E G ”。

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

添加链接描述
运行了一下博客中的代码 亲测实用.没有改动

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef char EleType;
typedef struct BiTNode{
	EleType data;//结点的数据域
	struct BiTNode *lchild,*rchild;//左右孩子的指针域
}BiTNode,*BiTree;
//约定前序遍历创建结点
//每个结点都有左右孩子,孩子不存在的为NULL
void CreateBiTree(BiTree *tree){
char c;
scanf("%c",&c);
if(' '==c){//输入空格代表孩子不存在
*tree=NULL;
}else{
*tree=(BiTNode *)malloc(sizeof(BiTNode));//为结点添加内存
(*tree)->data=c;//把C赋值给data
//这里运用了递归的思想,选择一边不断的递归下去
CreateBiTree(&(*tree)->lchild);//创建左子树
CreateBiTree(&(*tree)->rchild);//创建右子树
}
}
void visit(EleType data,int level){//这是输出中间结点
printf("%c第%d层\n",data,level);
return ;
}
//前序遍历
void PreOrderTraverse(BiTree tree,int level){
if(NULL!=tree){
	visit(tree->data,level);
	//递归思想的引用,层层遍历
	PreOrderTraverse(tree->lchild,level+1);
	PreOrderTraverse(tree->rchild,level+1);
}
}
//中序遍历
void MidOrderTraverse(BiTree tree,int level){
if(NULL!=tree){
	MidOrderTraverse(tree->lchild,level+1);
 	visit(tree->data,level);
	PreOrderTraverse(tree->rchild,level+1);
}
}
void PostOrderTraverse(BiTree tree,int level){
if(NULL!=tree){
	MidOrderTraverse(tree->lchild,level+1);
	PreOrderTraverse(tree->rchild,level+1);
 	visit(tree->data,level);
}
}
int main(int argc,char *argv[]){
BiTree tree=NULL;
printf("请按前序遍历的方式输入结点的数据,没有结点不存在请使用空格代替");
CreateBiTree(&tree);
printf("前序遍历:\n");
PreOrderTraverse(tree,1);
printf("中序遍历:\n");
MidOrderTraverse(tree,1);
printf("后序遍历:\n");
PostOrderTraverse(tree,1);
return 0;




}

运行结果:

前序遍历:
A第1层
B第2层
C第3层
D第3层
E第2层
G第3层
中序遍历:
C第3层
B第2层
D第3层
A第1层
E第2层
G第3层
后序遍历:
C第3层
B第2层
D第3层
E第2层
G第3层
A第1层

输入的时候需要注意一些事项:在创建二叉链表时,我们约定空格个位NULL孩子结点,我们以前序遍历的形式创建二叉链表输入应该是:ABC D E G 也就是ABC2个空格D2个空格E1个空格G2个空格换行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值