IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构之二叉树(概念) -> 正文阅读

[数据结构与算法]数据结构之二叉树(概念)

特殊的树-二叉树

2.1概念:

一棵二叉树是结点的一个有限集合,该集合:

1.或者为空

2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成
在这里插入图片描述


注意:二叉树的度不一定为2

如:

空树:度为0

只有一个结点:度为0

有两个结点:度为1

在这里插入图片描述


满二叉树和完全二叉树

在这里插入图片描述

满二叉树

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

在这里插入图片描述


问题1:若一颗满二叉树有N个结点,树的高度是多少

在这里插入图片描述


问:10亿个结点的满二叉树有多少层

在这里插入图片描述


完全二叉树


完全二叉树:完全二叉树是效率很高的数据结构,

完全二叉树是由满二叉树而引出来的。对于深度为K的,

有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

要注意的是满二叉树是一种特殊的完全二叉树。

完全二叉树:最多只有一个度为1的结点,X1 -> [0,1],

在这里插入图片描述


二叉树的性质

    1. 二叉树不存在度大于2的结点
    2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

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

    结点最多:满二叉树

    看上述满二叉树的图

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

    层数结点最多:满二叉树

    [

    03.对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有 n0== n2+1

    度为0的结点永远比度为2的结点多一个

    后续每增加一个度为2的,就会增加一个度为0的

    若规定根节点的层数为1,具有n个结点的满二叉树的深度h

    >[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNcx8kgi-1637302369100)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211106231631057.png)]

    (ps: 是log以2为底,n+1为对数)

在这里插入图片描述

对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:

  • 若i>0,i位置节点的双亲序号:(i-1)/2;

    • i=0,i为根节点编号,无双亲节点
  • 若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子

  • 若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子



  • 对于任意的二叉树都是由以下几种情况复合而成的:
    在这里插入图片描述

习题练习

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
A 不存在这样的二叉树
B 200
C 198
D 199

解答:

二叉树性质:n0 = n2 + 1

目前:n2 = 199 所以n0 = 200

叶子结点->度为0-> n0 = 200

所以答案为:B


2.下列数据结构中,不适合采用顺序存储结构的是( )
A 非完全二叉树  
B 堆
C 队列
D 栈

选择A


3.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
A n ->
B n+1
C n-1
D n/2

二叉树性质:n0 = n2 + 1

完全二叉树特点:X1 -> [0,1],最多只有一个度为1的结点


解题思路:

在这里插入图片描述


4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )
A 11
B 10
C 8
D 12

满二叉树是完全二叉树的特殊情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Trz3kObs-1637302369103)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211108102014587.png)]


完全二叉树结点范围:[2(h-1),2h -1 ] 所以高度范围为:[logN +1 , log(N+1)]

2^(h -1) = N ==> h= logN +1 2^h -1 = N ==> h = log (N+1) (log 以2为底的

完全二叉树高度范围:[ logN +1 , log (N+1) ]


h = 10 : [512,1023] 531刚好在范围内 ->B


5.一个具有767个节点的完全二叉树,其叶子节点个数为()
A 383
B 384
C 385
D 386

完全二叉树度为1的结点最多只有一个

1个

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHwTe56O-1637302369103)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211108102641883.png)]


0个

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9oWhrd3-1637302369104)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211108102653206.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0oL8MOn-1637302369104)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211108102535699.png)]


二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。


1.顺序存储

  1. 顺序存储
    顺序结构存储就是使用数组来存储一般使用数组只适合表示完全二叉树
  2. 因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。
  3. 二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

完全二叉树的顺序存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qys9PoQT-1637302369105)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107142711818.png)]


经典结论:

假设parent是父亲结点在数组中的下标

则左孩子 = parent*2+1

右孩子 = parent* 2 + 2

假设孩子的下标是child,不管左孩子还是右孩子 parent = (child - 1) / 2

如果算出来下标不再数组范围内->说明其没有孩子/没有父亲结点->根节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b07Nrtar-1637302369106)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107144207165.png)]


非完全二叉树的顺序存储

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtNKp9A5-1637302369106)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107142730063.png)]


不是完全二叉树也可也用数组存储,但是可能会浪费很多空间


2.链式存储

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。

通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。

链式结构又分为二叉链和三叉链

> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPk0iSR0-1637302369107)(E:\Believe everything maybe true\Bit\数据结构\07.二叉树\二叉树.assets\image-20211107143424630.png)]



二叉链

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}

三叉链

// 三叉链
typedef int BTDataType;
struct BinaryTreeNode
{
    struct BinTreeNode* _pParent; // 指向当前节点的双亲
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:12:21  更:2021-11-24 08:12:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:21:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码