二叉树的基本概念(下)


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。


🍊二叉树的分类

满二叉树

在一颗二叉树中,除了最后一层之外,如果所有的分支节点都存在左子树和右子树,并且所有的叶子节点都在同一层上,这样的二叉树,我们称之为满二叉树。
在这里插入图片描述
满二叉树的特点:
1.叶子节点只会出现在最下面一层。
2.非叶子节点的节点,拥有子树的个数一定为2。
3.在同样深度的二叉树中,满二叉树的节点个数最多。

完全二叉树

对于一颗具有n个节点的二叉树按照层数进行编号,如果编号为i(1 <= i <= n)的结点与同样深度为满二叉树节点编号为i的结点在二叉树中的位置完全相同,则这棵树,我们称之为完全二叉树。

注意:结点编号规则从上到下,从左到右.
在这里插入图片描述
我们来分析一下完全二叉树的相关规律:

节点左孩子右孩子
123
245
367
489
510

根据表格的值我们思考一下,如果定义节点为i ,那么左孩子和右孩子存在的条件是什么?

重点:

对于完全二叉树,共有n个节点,编号为i(i >= 1)的节点的特点:
左孩子存在的条件:2 * i <= n, 编号为2 * i
右孩子存在的条件: 2 * i + 1 <= n,编号为2 * i + 1

🍊二叉树的存储

顺序存储[完全二叉树]

顺序存储的话,若不是完全二叉树存储就没有意义。
假设下面有一棵树,我们如何把它存到数组中的?
在这里插入图片描述
思路:先把它转换成完全二叉树,然后再编号
在这里插入图片描述

因此,<>我们顺序存储规定无论是何种树,我们都会转换成完全二叉树。然后一层一层的从左给我们的二叉树进行编号,然后存储在数组中。及如下图。
在这里插入图片描述
我们发现这样顺序存储树的方式非常的浪费空间,那么我们该如何解决这个问题呢?这个需要运用链式存储方式进行存储。

链式存储

链式存储:定义结点保存左孩子和右孩子的地址

在这里插入图片描述
链式存储定义代码:

typedef char data_t

typedef struct bnode
{
	data_t data;
	struct bnode *lchild;
	struct bnode *rchild;
}bitree_t;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值