ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构-二叉树

2021-09-05 15:34:29  阅读:516  来源: 互联网

标签:推导 log2n 取整 二叉树 圆圈 数据结构 节点



持续学习&持续更新中…


数据结构-二叉树

树形结构简介

在这里插入图片描述

在这里插入图片描述

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

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

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

树的基本概念01

在这里插入图片描述

节点

  • 节点:图示中的每一个圆圈(元素)都是节点。
  • 根节点:图示中的圆圈1就是根节点,一棵树最多只有一个根节点
  • 父节点:圆圈1就是圆圈2、3、4、5、6的父节点;圆圈2就是圆圈21和圆圈22的父节点。
  • 子节点:圆圈2、3、4、5、6就是圆圈1的子节点;圆圈21和圆圈22就是圆圈2的子节点。
  • 兄弟节点:同一个节点下的所有圆圈(元素)都是兄弟节点,例如圆圈2、3、4、5、6都是兄弟节点。也就是说,兄弟节点拥有相同的父节点。

子树

子树:

在这里插入图片描述

左右子树:

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

树的基本概念02

在这里插入图片描述

层数

在这里插入图片描述

节点的深度

圆圈31的深度是3;

在这里插入图片描述

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

节点的高度

在这里插入图片描述

有序树、无序树、森林

在这里插入图片描述

二叉树的基本概念

二叉树是有序树

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

二叉树的几种形态

在这里插入图片描述

二叉树的性质

在这里插入图片描述

二叉树的边数

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

边数的计算方式一:

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

  • 如果某个节点的度为2那么这个节点就有两条边
  • 如果某个节点的度为1那么这个节点就有一条边
  • 如果某个节点的度为0(叶子结点)那么这个节点就没有边

得到: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有