数据结构堆的创建,二叉树的创建,遍历以及部分功能的实现(C语言实现)

本文介绍了数据结构中的堆和二叉树,包括完全二叉树解析、堆的创建、二叉树的链式创建、遍历及部分功能的实现,如计算二叉树某深度节点的个数、叶子节点个数和树的高度。通过C语言详细阐述了相关算法和代码实现。
摘要由CSDN通过智能技术生成

1、简介

2、完全二叉树解析

3、堆的创建

4、二叉树的链式创建

5、二叉树的遍历

6、二叉树的部分功能函数

1、简介

二叉树就是有两个分支的数

我们通常称左右分支为左孩子节点和右孩子节点

二叉树又有多种类型,有满二叉树、完全二叉树和普通的无规则二叉树。

因为满二叉树和完全二叉树有一个特点:

每一层的节点都是连续的。满二叉树的就是没有一层都是最大节点数的完全二叉树。

根据这个特点,我们将可以使用顺序表的方式创建这两种特殊的二叉树。

顺序表在存储连续空间的数据时不会造成空间上的浪费。

先来看看数据在顺序表中的存储情况:

 我们可以得出以下结论:

左孩子的下标=父节点*2+1

右孩子的下标=父节点*2+2

父节点下标=(任何一个孩子的下标-1)/2

得出这个结论以后可以很好的定位树中每一个节点。

2、完全二叉树解析

首先构造一个顺序表的结构体

typedef struct btree{
	type* a;
	int size;
	int capacity;
}btree;

然后时树的初始化和销毁,销毁的用处时防止内存泄漏。是十分重要的小细节

void treeinit(btree* bt){
	assert(bt);
	bt->a=NULL;
	bt->capacity=bt->size=0;
}
void treedestroy(btree* bt){
	assert(bt);
	free(bt->a);
	bt->capacity=bt->size=0;
}

接下来就是在树中插入数据

先看图形演示,给一段数组,我们只要能画出相应的二叉树即可

 看到这张图是不是很快就能明白完全二叉树是怎样利用数组完成二叉树的创建。

首先完成二叉树的插入,这里我们使用的是动态开辟的方法(realloc)

void treepush(btree* bt,type x){
	assert(bt);
	if (bt->capacity == bt->size) {
		type newcapacity = bt->capacity == 0 ? 4 :
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值