二叉树和堆概念

二叉树概念

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

的二叉树组成。

二叉树的特点:

  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满足大根堆。其他不满足大小根堆。

相关推荐
CV工程师小林23 分钟前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z1 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
还听珊瑚海吗1 小时前
数据结构—栈和队列
数据结构
Aic山鱼1 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
sjsjs111 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
Lzc7742 小时前
堆+堆排序+topK问题
数据结构·
cleveryuoyuo2 小时前
二叉树的链式结构和递归程序的递归流程图
c语言·数据结构·流程图
湫兮之风2 小时前
c++:tinyxml2如何存储二叉树
开发语言·数据结构·c++
zhyhgx3 小时前
【算法专场】分治(上)
数据结构·算法
Joeysoda3 小时前
Java数据结构 时间复杂度和空间复杂度
java·开发语言·jvm·数据结构·学习·算法