初步认识 树和堆

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博客

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值