二叉树和堆概念

二叉树概念

一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树

的二叉树组成。

二叉树的特点:

  1. 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
  2. 二叉树的子树有左右之分,其子树的次序不能颠倒。

    上述都是二叉树。

特殊的二叉树:

满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

满二叉树总节点个数:

已知满二叉树有N个节点,那么它的高度是多少?

2^k-1 = N,求K即可。 层数是从1开始数的。

完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

即:K层的树,前K-1层都是满的,只有K层不满,但最后一层是需要从左到右连续的。

已知完全二叉树有N个节点,那么它的高度是多少?

2^k-X = N,求K即可。 层数是从1开始数的。 X为最后一层的节点个数。

对于满二叉树和完全二叉树,他们的高度都可看作为 log(N),N为节点个数。

二叉树的性质

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1) 个结点.

  2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h- 1.

  3. 对任何一棵二叉树, 如果度为0(叶子节点)其叶结点个数为 n0, 度为2(有两个分支的节点)的分支结点个数为 n2,则有n0=n2+1。即:度为0的节点比度为2节点的永远多一个。如下图:黑度为0的节点红度为2的节点

  4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=Log2(n+1). (ps:Log2(n+1)是log以2为

    底,n+1为对数) .

度为0的节点比度为2节点的永远多一个,所以200个度为0的节点。 B

假设度为0的节点有a0个,度为1的节点有a1,度为2的节点有a2个,所以2n = a0+a1+a2。a2 = a0+1,

2n = a0 + a1 + a0-1 = 2a0 -1 + a1。对于完全二叉树,度为1的有0个或者最多一个节点。如果a1=0,a0就是一个小数的结果,不存在这样的节点。所以,a1=1,所以叶子节点为n。

满二叉树的节点总数是(2^k) -1。

2^9 -1 = 511。满二叉树9层就有511个节点了。

2^10 = 1024 k=10。 所以K至少大于9层,为10层。

假设度为0的节点有a0个,度为1的节点有a1,度为2的节点有a2个,767 = a0 + a1 + a2 = 2a0 + a1 - 1,如果a1 = 1,则不匹配左边,所以a1 = 0。所以 a0 = 768/2 = 384。

堆 --- 完全二叉树

堆的物理结构(内存中如何存):

堆的逻辑结构(想象到的结构):

堆分为两种,大根堆和小根堆:

小根堆:父亲小于孩子。

大根堆:父亲大于孩子的值。

假设父亲的下标是parent,则左孩子的下标是 leftc = 2parent + 1,右孩子的下标是 rightc = 2parent + 2。

选A,因为只有A满足大根堆。其他不满足大小根堆。

相关推荐
ll7788119 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
Akiiiira10 小时前
【数据结构】栈
数据结构
c6lala10 小时前
数据结构day1
数据结构
多多*11 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle
逐光沧海11 小时前
数据结构基础--蓝桥杯备考
数据结构·c++·算法·蓝桥杯
与己斗其乐无穷16 小时前
数据结构(2)线性表-顺序表
数据结构
周Echo周16 小时前
20、map和set、unordered_map、un_ordered_set的复现
c语言·开发语言·数据结构·c++·算法·leetcode·list
小青龙emmm17 小时前
数据结构(一) 绪论
数据结构
矿渣渣17 小时前
AFFS2 的 `yaffs_ext_tags` 数据结构详解
数据结构·算法·文件系统·yaffs2
chenyuhao202418 小时前
链表的面试题4之合并有序链表
数据结构·链表·面试·c#