1.树的基本概念
树的一些基本概念的定义一定程度上模仿了人的亲缘关系。
树的深度:从逻辑结构上看,指整个树结构的层数,树的根节点的层数是1。下图所示的树的深度为3.
节点的度:该节点的子树个数。A节点的度是2.
父节点:如果两个节点间有对应关系,那么引出下一个节点的节点就是父节点。A是B和C的父节点。
子节点:父节点引出的节点。B和C是A的子节点。
叶节点:度为0的节点,没有子节点的节点。D E F G 都是叶节点。
兄弟节点:父节点相同的节点互成为彼此的兄弟节点,这里的兄弟类比现实中的亲兄弟。D E 是兄弟节点。
树的度:树中节点最大的度。该树的度是2。
节点的祖先:从根节点到该节点经过的所有节点。G的祖先是A和C。
子孙:以某一节点为根的子树中的任意节点。B D E是A 的子孙。
森林:多个相互独立的树的集合
2.实现树结构的一般方法:左孩子,右兄弟法
在我们windows的计算机文件管理系统中,就是树结构,其算法就是左孩子右兄弟法。
typedef int TreeDataType;//这里假设树的内容是整型
struct TreeNode//定义树的节点,里面包含了节点存储的数据和两个指针
{
TreeDataType* leftchild;
TreeDataType* rightbrother;
TreeDataType data;
}
通过以上代码中的两个指针就可以找到整个树结构中的任意数据
3 二叉树:任意一个节点最多有两个子节点的树
两种特殊的二叉树:
完全二叉树:任意一节点的子节点是连续的,即要么有两个子节点,要么没有子节点,要么只有左结点,而不能单独只存在右节点。
满二叉树:假设一个树有n层,那么n-1层的所有节点都有两个子节点。满二叉树还是特殊的完全二叉树。
二叉树的应用:搜索二叉树,树中的任意一节点的左子节点都是比该节点小的数,右子节点都是比该节点大的数
4.堆的介绍和实现
堆是一种以顺序存储为存储形式的完全二叉树结构,分为大堆小堆两种。
大堆的根数据是最大的,大堆的每一个根节点的数据都大于该节点的子节点。小堆相反。
堆的一般实现方法:
逻辑结构是堆,物理结构是数组,用数组来存储每个节点的数据
在定义过程中,通过二叉树的性质,可得公式,左子节点leftchild的下标=父节点parent的下标*2+1
rightchild=parent*2+2,parent=(child-1)/ 2.
具体要实现的接口有
初始化
销毁
插入
向上调整
删除
向下调整
判断堆是否为空
返回根的数据
等等。。。
具体实现代码请看大堆和小堆的实现方法和代码-CSDN博客