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 :