目录
树的概念
树是一种非线性的数据结构,因为看起来像一棵倒挂的树,因此得名。

如图是一棵树,1没有父节点所以是根节点,3,5,6没有子节点所以是叶节点。
树的特点
1.子树是不相交的。
2.除了根节点外,每个节点有且仅有一个父节点。
3.一颗N个结点的树有N-1条边。
树的表示
树有多种表示方式,如:双亲表示法,孩子表示法,孩子兄弟表示法,最简单的孩子兄弟表示法。
typedef int DataType;
struct Node
{
struct Node* _firstChild1;//孩子
struct Node* _pNextBrother;//兄弟
DataType _data; //表示法
};
目录的实现就可以用树来实现。
二叉树概念
特点:
1.二叉树最多有两棵子树,即二叉树不存在 度大于2的结点。
2.二叉树的子树有左右之分,其子树的次序不能颠倒。
特殊的二叉树有满二叉树和完全二叉树。
二叉树存储结构
有顺序结构和链式结构
顺序存储
顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。二叉树顺序存储在物理上是一个数组,在逻辑上是一棵二叉树。

链式存储
用链表表示一棵二叉树,即用链来指示元素的逻辑关系。
struct BinaryTreeNode//二叉链表 { struct BinaryTreeNode* _pLeft; struct BinaryTreeNode* _pRight; BTDataType _data; };
堆
堆是特殊的树。
特点:
1.堆是完全二叉树。
2.堆的字节点必须小于或大于双亲结点。
根结点为最小值是最小堆,为最大值是最大堆。
堆的代码实现
typedef int HPDataType;
typedef struct Heap
{
HPDataType* _a;
int _size;
int _capacity;
}Heap;
// 堆的构建
void HeapCreate(Heap* hp, HPDataType* a, int n);
// 堆的销毁
void HeapDestory(Heap* hp);
// 堆的插入
void HeapPush(Heap* hp, HPDataType x);
// 堆的删除
void HeapPop(Heap* hp);
// 取堆顶的数据
HPDataType HeapTop(Heap* hp);
// 堆的数据个数
int HeapSize(Heap* hp);
// 堆的判空
int HeapEmpty(Heap* hp);
// 对数组进行堆排序
void HeapSort(int* a, int n);
本文详细探讨了树的基本概念,包括树的表示方法,重点介绍了二叉树特性及两种常见存储结构——顺序存储和链式存储。接着深入剖析了堆的数据结构,包括堆的定义、特点以及代码实现,涉及最小堆和最大堆的应用。适合理解非线性数据结构和算法实现的读者。


被折叠的 条评论
为什么被折叠?



