树和二叉树

数据结构 P6 树和二叉树

在这里插入图片描述

简介

在这里插入图片描述

(Tree)是n(n>=0)个结点的有限集;n=0时称为空树。在任意一颗非空树中

1.有且仅有一个特定的称为(Root)的结点

2.当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中一个集合本身又是一棵树,并且称为根的子树(SubTree)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rd2GbG7S-1590928868538)(en-resource://database/8792:1)]

二叉树

二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树右子树的二叉树组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAwjHlIv-1590928868541)(en-resource://database/8794:1)]

链式二叉树的实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zndz4B77-1590928868544)(en-resource://database/8338:1)]

创建结构体

创建文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPsMQo9q-1590928868546)(en-resource://database/8340:1)]

编写Makefile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qeEGVST6-1590928868547)(en-resource://database/8342:1)]

test:test.o tree.o 
	gcc -o test test.o tree.o 
test.o:test.c tree.h
	gcc -c test.c
tree.o:tree.c tree.h
	gcc -c tree.c
.PHONY:clean
clean:
	rm *.o

编写结构体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOKHiU9R-1590928868549)(en-resource://database/8344:1)]

#ifndef __TREE_H__
#define __TREE_H__

//创建char结构体别名为data_t
typedef char data_t;

//创建二叉树结构体
typedef struct node_t{
	data_t data;
	struct node_t *left;
	struct node_t *right;
}bittree;

创建树

创建头文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swZKgYEz-1590928868550)(en-resource://database/8346:1)]

创建树
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P1GxXka7-1590928868552)(en-resource://database/8356:1)]

//创建二叉树
bittree *tree_create(){
	data_t ch;
	bittree *r;

	scanf("%c",&ch);
	if(ch == '#'){
		return NULL;
	}
	if((r = (bittree *)malloc(sizeof(bittree))) == NULL){
		printf("malloc is failed\n");
		return NULL;
	}
	r->data = ch;
	r->left = tree_create();
	r->right = tree_create();
	return r;
}//创建二叉树

先序遍历

创建头文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IlCGVWU7-1590928868553)(en-resource://database/8348:1)]

创建先序遍历函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DkJE4uYv-1590928868554)(en-resource://database/8358:1)]

void preorder(bittree *r){
	if(r == NULL){
		return;
	}
	printf("%c",r->data);
	preorder(r->left);
	preorder(r->right);
}//先序遍历

编写test.c
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0wDP8L5-1590928868555)(en-resource://database/8364:1)]

测试程序(以图例的树为例)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3mPhmyT9-1590928868557)(en-resource://database/8376:3)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DrpSziK-1590928868558)(en-resource://database/8366:1)]

中序遍历

创建头文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwesFWsb-1590928868559)(en-resource://database/8350:1)]

创建中序遍历函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LJA6rnZy-1590928868561)(en-resource://database/8360:1)]

void inorder(bittree *r){
	if(r == NULL){
		return;
	}
	inorder(r->left);
	printf("%c",r->data);
	inorder(r->right);

}//中序遍历

编写test.c
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NrvyEW55-1590928868562)(en-resource://database/8368:1)]

测试程序(以图例的树为例)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eWzeoDSL-1590928868563)(en-resource://database/8376:3)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2kcqJ80q-1590928868564)(en-resource://database/8370:1)]

后序遍历

创建头文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5jIhUsc-1590928868565)(en-resource://database/8352:1)]

创建后序遍历函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKe6Xe5j-1590928868567)(en-resource://database/8362:1)]

void postorder(bittree *r){
	if(r == NULL){
		return;
	}
	postorder(r->left);
	postorder(r->right);
	printf("%c",r->data);
}//后序遍历

编写test.c
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1xuKydqN-1590928868568)(en-resource://database/8372:1)]

测试程序(以图例的树为例)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSXQpQDH-1590928868569)(en-resource://database/8376:3)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ASbu24IJ-1590928868570)(en-resource://database/8374:1)]

更多内容

数据结构 P1简介与分类

数据结构 P2线性顺序表

数据结构 P3线性单链表

数据结构 P4 栈

数据结构 P5 队列

数据结构 P6 树和二叉树

数据结构 P7 基础查找

数据结构 P8 哈希表

数据结构 P9 基础排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CagePan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值