让“树和二叉树”埋在记忆土壤中--性质和概念

server/2025/3/26 9:34:21/

Nice to meet your!

目录

树的介绍:

树的创建:

二叉树的概念和结构:

二叉树的存储结构:


树的介绍:

概念和结构:

不知你们是否在现实中看见过分为两个叉的枯树,大概长这样:

那我们数据结构中的二叉树有长什么样呢?它是倒着的结构,仿佛你进入了颠倒的世界,它由许多结点构成,且每个子树的根结点有且只有一个前驱,可以有0个或多个后继,因此树是递归定义的

如下图:

在树型结构中子树是不能交叉的哦

相关名词:

结点的度:一个节点含有的子树个数称为该结点的度

树的度:最大结点的度称为树的度,如上图树的度为2

结点的层次:从根开始算,根为第一层,向下依次计算

双亲结点/父结点:有子数的根结点称为双亲结点/父结点

子结点:父结点下的结点叫做子结点

兄弟结点:具有相同父结点的称为兄弟结点

叶结点:度为0的结点,如上图最下面的一排都为叶结点

树的高度:一个树的最大层次,如上图树的高度为3

树的创建:

首先我们必然要创建一个结构体,它既要保存值域,还需保存结点和结点的关系,表示的方法有很多,我们使用最常用的孩子兄弟表示法

typedef int DataType;
struct Node
{struct Node* firstkid;//第一个孩子的结点struct Node* Nextbrother;//指向下一个兄弟的结点DataType data;//数据域
};

它又是如何访问的呢?我们可以看下面的结构图:

二叉树的概念和结构:

二叉树有一个根节点和两颗左右子树的二叉树组成,子树有左右之分,次序不能颠倒

二叉树可能存在的情况:

特殊的二叉树:

满二叉树:每一个结点的层次都达到最大值,如果这个二叉树为k层,那它一共有2^k - 1个结点

完全二叉树:对于深度有为K,有N个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树编号为1至N的结点一一对应称之为完全二叉树,满二叉树是一种特殊的完全二叉树

注意:在完全二叉树中,若树为K,那么K-1层的结点必须是满的,第K层的结点可以不满,但必须是从左至右连续!

性质: 

1.若根结点层数为1,则一颗非空二叉树第i层有2^(i - 1)个结点

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

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

4.若规定根结点的层数为1,则具有N个结点的满二叉树的深度h = log2(N+1)

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

若 i > 0,则该结点的父结点序号为:( i - 1) / 2;若 i = 0,则无父结点

若2i + 1 < N,则该结点的左孩子序号为:2i + 1;若2i + 1 >= N,则无左孩子

若2i + 2 > N,则该结点的右孩子序号为:2i + 2;若2i + 2 >= N,则无右孩子

二叉树的存储结构:

二叉树有两种存储结构:顺序结构和链式结构

顺序结构:

顺序结构使用数组来存储数据,一般只适合用来表示完全二叉树,二叉树的顺序存储在物理上是一个数组,但在逻辑上是一棵二叉树

链式结构:

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素之间的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来存储该结点左孩子和右孩子所在的结点的地址


http://www.ppmy.cn/server/176890.html

相关文章

关于深度学习的梯度下降法介绍

目录 内容提要 1. 梯度是什么&#xff1f; 2. 怎么个下降法&#xff1f; 3. 潜在的问题 4. 陷入局部最小 5. 遭遇鞍点 6. 学习率的选择 总结 内容提要 梯度下降法是机器学习中用于优化模型参数的核心算法之一 在训练神经网络时扮演着至关重要的角色 掌握这一“黑魔法…

python_巨潮年报pdf下载

目录 前置&#xff1a; 步骤&#xff1a; step one: pip安装必要包&#xff0c;获取年报url列表 step two: 将查看url列表转换为pdf url step three: 多进程下载pdf 前置&#xff1a; 1 了解一些股票的基本面需要看历年年报&#xff0c;在巨潮一个个下载比较费时间&…

主流区块链

文章目录 主流链1. Solana特点&#xff1a;适用场景&#xff1a;工具链&#xff1a; 2. Binance Smart Chain (BSC)特点&#xff1a;适用场景&#xff1a;工具链&#xff1a; 3. Avalanche特点&#xff1a;适用场景&#xff1a;工具链&#xff1a; 4. Polkadot特点&#xff1a;…

再学:合约继承 、抽象合约 solidity接口、库、事件 合约重入攻击

目录 1.合约继承 2.抽象合约 3.接口 4.库 5.事件 6.重入攻击 1.合约继承 这里的代码解释&#xff1a;B继承A B可以访问A的set()方法&#xff08;即便是internal也可以&#xff09;&#xff0c;也可以拿到A的a变量。 只要这些在A的东西不是private就行 若想在子类可以重写…

【jQuery 使用教程】

文章目录 一、前言二、jQuery 简介1. 什么是 jQuery&#xff1f;2. jQuery 发展历史 三、jQuery 的使用1. 引入 jQuery方式 1&#xff1a;使用 CDN方式 2&#xff1a;本地引入 2. jQuery 语法基础1. 语法结构 3. jQuery 选择器4. jQuery 事件处理1. 点击事件 (click())2. 鼠标悬…

wangEditor富文本轻量使用及多个编辑器

0、官网 wangEditor multi editor 1、引入文件 <!--【富文本】第1步&#xff0c;引入--> <link rel"stylesheet" href"/wangeditor/style.css"/> <script charset"utf-8" src"/wangeditor/index.js"></script…

IO(Input/Output)

IO IO,即输入/输出&#xff0c;磁盘IO,网络IO 计算机角度的IO 主观意思就是计算机输入输出&#xff0c;计算机是主体。计算机分为5个部分:运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备。 输入设备&#xff1a;向计算机输入数据和信…

网络爬虫【爬虫库request】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库&#xff0c;完全满足如今网络爬虫的需求。与Urllib对比&#xff0c;Requests不仅具备Urllib的全部功能&#xff1b;在开发使用上&…