其他分享
首页 > 其他分享> > 数据结构-二叉树

数据结构-二叉树

作者:互联网


持续学习&持续更新中…


数据结构-二叉树

树形结构简介

在这里插入图片描述

在这里插入图片描述

以文件夹的分类为例,如果我们将各种不同类型的文件按照其类型分别放在不同的文件夹中,可以大大提高我们寻找文件的速度。

树形结构无论是考试还是面试都很重要。

以后的课程都离不开树形结构。

树的基本概念01

在这里插入图片描述

节点

子树

子树:

在这里插入图片描述

左右子树:

在这里插入图片描述
上图中,红笔圈出来的部分就分别是圆圈2的左右子树。

树的基本概念02

在这里插入图片描述

层数

在这里插入图片描述

节点的深度

圆圈31的深度是3;

在这里插入图片描述

圆圈2的深度是2;
在这里插入图片描述

节点的高度

在这里插入图片描述

有序树、无序树、森林

在这里插入图片描述

二叉树的基本概念

二叉树是有序树

在这里插入图片描述
二叉树的特点:二叉树是(严格)有顺序的;二叉树是(严格)区分左右子树的。

二叉树的几种形态

在这里插入图片描述

二叉树的性质

在这里插入图片描述

二叉树的边数

在这里插入图片描述
令二叉树的边数为T,节点总数为n,度为0(叶子结点)的节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2。

边数的计算方式一:

节点的边数和节点的度数相同:

得到:T = n1 + 2 * n2

边数的计算方式二:

如果反过来思考一下节点的边数,会有新的发现:除了根节点以外的每一个节点,其头顶都会有一条边。

得到:T = n - 1 = n0 + n1 + n2 - 1

真二叉树

在这里插入图片描述

满二叉树

在这里插入图片描述

完全二叉树

节点从上往下、从左到右排布的二叉树就是完全二叉树。如果排满了,就是满二叉树。

如果对完全二叉树从上往下、从左到右,按照顺序开始编号的话,这个完全二叉树的编号都会和它对应的满二叉树的编号完全一致。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完全二叉树的性质01

在这里插入图片描述

总结点数量n和完全二叉树高度h关系的推导

h - 1 <= log2n < h

首先,h肯定是一个整数(树的高度)。n是总结点数量。

log2n求出来不一定是一个整数,有可能是一个浮点数。

当log2n求出来是浮点数的时候

假设当log2n求出来是4.8:
在这里插入图片描述
要满足h - 1 <= log2n < h,那么此时,h求出来一定是5;

假设当log2n求出来是7.4的时候,此时h求出来一定是8。

由此可以推出:h = log2n向上取整或者h = log2n向下取整 + 1

向下取整就是指省略小数部分的意思。(只取整数部分)
向上取整就是指取大于该小数的最小整数。(整数部分 + 1)

在这里插入图片描述

当log2n求出来是整数的时候

假设当log2n求出来是5:

在这里插入图片描述

要满足h - 1 <= log2n < h,那么此时,h求出来一定是6;

假设当log2n求出来是7的时候,此时h求出来一定是8。

由此可以推出:h = log2n + 1

n和h的关系推导总结

上述推导出了三个公式:

  1. h = log2n向上取整 (log2n为浮点数)
  2. h = log2n向下取整 + 1 (log2n为浮点数)
  3. h = log2n + 1(log2n为整数)

很明显,我们应该使用公式2和公式3,因为它们都有共同的+1操作。

又由于(在Java、C中)整数向下取整还是该整数,所以我们可以最终使用公式2作为n与h的关系公式。

完全二叉树的性质02

对节点从1开始编号

在这里插入图片描述
对节点从0开始编号(常用)
在这里插入图片描述

面试题:求完全二叉树叶子结点的个数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

推导n0的总结公式

非叶子结点的推导过程和n0的推导过程类似,这里只推导一下n0总结的公式。

在这里插入图片描述

向上取整和向下取整一般来说是可以互相切换的,但是编程中默认就是向下取整,因此一般都使用向下取整。

在这里插入图片描述

国外二叉树的叫法

在这里插入图片描述

参考

小码哥李明杰老师课程: 恋上数据结构与算法 第一季.

小码哥李明杰老师博客: M了个J.


本文完,感谢您的关注支持!


标签:推导,log2n,取整,二叉树,圆圈,数据结构,节点
来源: https://blog.csdn.net/weixin_44018671/article/details/120112742