【数据结构与算法】二叉树的基本概念

news2024/11/16 9:28:39

文章目录

  • 二叉树的基本概念
    • 定义
    • 二叉树的性质
  • 几种特殊的二叉树
    • 满二叉树
    • 完全二叉树
    • 二叉排序树
    • 平衡二叉树
    • 正则二叉树
  • 二叉树的存储结构
    • 顺序存储结构
    • 链式存储结构

二叉树的基本概念

定义

二叉树是一种特殊的树形结构,其特点是每个结点至多只有两颗子树,并且二叉树的子树有左右之分,其次序不可颠倒。

根据树的基本概念可知,二叉树是一棵有序树。

注意:二叉树和度为2的树、度为2的有序树不是同一概念,不要弄混淆。

如果将二叉树的左右子树颠倒,那么将产生一棵新的二叉树(与原来的二叉树不同)。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。

在这里插入图片描述

二叉树的性质

  1. 非空二叉树上的叶结点个数等于度为2的结点个数加1,即 n 0 = n 2 + 1 n_{0}=n_{2}+1 n0=n2+1

    理由:设总结点树为n,度为0的结点数为 n 0 n_{0} n0,度为1的结点数为 n 1 n_{1} n1,度为2的结点数为 n 2 n_{2} n2。则由树的基本概念可知, n = 0 ∗ n 0 + 1 ∗ n 1 + 2 ∗ n 2 + 1 = n 1 + 2 n 2 + 1 n=0*n_{0}+1*n_{1}+2*n_{2}+1=n_{1}+2n_{2}+1 n=0n0+1n1+2n2+1=n1+2n2+1(树的结点总数=结点的度数之和+1),又 n = n 0 + n 1 + n 2 = n 1 + 2 n 2 + 1 n=n_{0}+n_{1}+n_{2}=n_{1}+2n_{2}+1 n=n0+n1+n2=n1+2n2+1,所以有 n 0 = n 2 + 1 n_{0}=n_{2}+1 n0=n2+1

  2. 非空二叉树的第k层最多有 2 k − 1 2^{k-1} 2k1个结点( k ⩾ 1 k\geqslant1 k1)。

    理由:由数学归纳法,第 1 层至多有 1 个结点 = 2 0 2^{0} 20个,第 2 层至多有 2 个 = 2 1 2^{1} 21,第 3 层至多有 4 个 = 2 2 2^{2} 22,所以第 k 层至多有 2 k − 1 2^{k-1} 2k1

  3. 高度为h的二叉树至多有 2 h − 1 2^{h}-1 2h1个结点( h ⩾ 1 h\geqslant1 h1)。

    理由: 2 0 + 2 1 + 2 2 + ⋯ + 2 h − 1 = 2 h − 1 2^{0}+2^{1}+2^{2}+\cdots+2^{h-1}=2^{h}-1 20+21+22++2h1=2h1

几种特殊的二叉树

满二叉树

假设一棵二叉树的高度为h,如果它有 2 h − 1 2^{h}-1 2h1个结点(即二叉树每一层都含有最多的结点),那么这样的二叉树被称为满二叉树。

完全二叉树

假设一棵二叉树的高度为h,有n个结点。按层序编号时,如果它的每个结点都与高度为h的满二叉树中的结点的编号一一对应,那么我们将这样的二叉树称为完全二叉树。

举个🌰

在这里插入图片描述

如图,在图b中,如果6号结点没有左孩子(没有12号结点),但有右孩子。那么按层序编号时,这个右孩子的编号为12,与a中的6号结点的右孩子的编号13不对应,因此这颗二叉树不是完全二叉树。

性质

高度为h,结点个数为n的完全二叉树(按层序编号)具有以下性质:

  • i ≤ ⌊ n / 2 ⌋ i\leq\lfloor n/2\rfloor in/2,则结点i为分支结点,否则为叶结点,最后一个分支结点的编号为 i ≤ ⌊ n / 2 ⌋ i\leq\lfloor n/2\rfloor in/2
  • 叶结点只可能出现在层次最大的两层上。
  • 若有度为1的结点,只可能出现一个(若出现多个则必然违反完全二叉树的定义),度为1的结点只可能是编号为 i ≤ ⌊ n / 2 ⌋ i\leq\lfloor n/2\rfloor in/2的结点。
  • 若一个结点为叶结点或其只有左孩子,那么编号大于它的结点必然是叶子结点。
  • 若n为奇数,则每个分支结点都有左右孩子(因为减去根结点后,结点个数为偶数)
  • 若n为偶数,则编号为n/2的分支结点只有左孩子,没有右孩子,编号小于n/2的结点都有左右孩子。
  • 编号为i的结点的双亲结点编号为 ⌊ i / 2 ⌋ \lfloor i/2\rfloor i/2
  • 若结点 i i i 有左右孩子,则左孩子编号为 2 i 2i 2i,右孩子编号为 2 i + 1 2i+1 2i+1
  • 结点 i i i 所在层次(深度)为 ⌊ log ⁡ 2 i ⌋ + 1 \lfloor \log_2i \rfloor+1 log2i+1
  • 具有 n n n 个( n ⩾ 1 n \geqslant 1 n1) 结点的完全二叉树的高度为 ⌈ log ⁡ 2 ( n + 1 ) ⌉ \lceil \log_2(n+1) \rceil log2(n+1)⌉ ⌊ log ⁡ 2 n ⌋ + 1 \lfloor \log_2 n \rfloor +1 log2n+1

二叉排序树

假设有一棵二叉树,如果它满足以下三条性质:

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉排序树;

我们将这样的二叉树称为二叉排序树。

个人定义:

对于一棵二叉树的任意结点来说,如果它满足:

  1. 若其左子树不为空,则左子树上的所有结点的值均小于它的值。
  2. 若右子树不空,则右子树上所有结点的值均大于它的值。

我们把这颗二叉树叫做二叉排序树。

注意:二叉排序树一定是指左边小右边大的树,如果左边大右边小,那么这个二叉树不是二叉排序树。

平衡二叉树

假设有一棵二叉树,树中任意一个结点的左子树和右子树的高度之差的绝对值不超过1,我们把这样的二叉树叫做平衡二叉树。

正则二叉树

假设有一棵二叉树,其只有度为0的结点和度为2的结点,我们把这样的二叉树叫做正则二叉树。

二叉树的存储结构

顺序存储结构

二叉树的顺序存储结构是指用一组连续的存储单元按照满二叉树的编号依次自上而下、从左往右存储结点元素。

王道写的按照完全二叉树,但是20年的408统考真题的答案是按照满二叉树的编号,所以这里我也用满二叉树。

链式存储结构

我们一般使用二叉链表来存储二叉树,二叉链表的结点至少包含3个域:数据域,左指针域,右指针域。

// C++

template <class T>
class TreeNode{
    T data;
    TreeNode<T> *left, *right;
}

template <class T>
class Tree{
    TreeNode<T> *head;
}

在含有n个结点的二叉链表中,存在n+1个空指针域。

理由:二叉链表总共有2*n个指针,n个结点,使用了n-1个指针,所以二叉链表存在n+1个空指针域。

有时候我们也会使用三叉链表来表示二叉树,三叉链表中多余的那个指针指向双亲结点。

// C++

template <class T>
class TreeNode{
    T data;
    TreeNode<T> *left, *right, *parent;
}

template <class T>
class Tree{
    TreeNode<T> *head;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端生成海报图技术选型与问题解决

作者&#xff1a;vivo 互联网大前端团队 - Tian Yuhan 本篇文章主要聚焦海报图分享这个形式&#xff0c;探讨纯前端在H5&小程序内&#xff0c;合成海报到下载到本地、分享至社交平台整个流程中可能遇到的问题&#xff0c;以及如何解决。 一、引言 绝大多数的电商平台都会…

Hive 基本操作

1.启动Hadoop集群 2.将学生信息上传到/bigdata/hive/hive_stu目录下 查看测试数据 3.进入hive,切换到db_test库&#xff08;如没有&#xff0c;可以先创建 create database db_test&#xff09;

网络工程从头做-1

网络工程从头做-1 自下而上&#xff0c;从接入交换机开始网络的配置和规划 实验拓扑&#xff1a; 实验步骤&#xff1a; 1.完成基本配置 1.1 PC端IP地址信息配置略 1.2 接入层交换机S1配置 [Huawei]sys S1 [S1]undo in [S1]vlan b 10 20 [S1]int e0/0/1 [S1-Ethernet0/0/1]p l…

618大促,消费者用行动警告国产手机,超过3000都不买了

618大促已过了三分之一&#xff0c;除了iPhone成为大赢家之外&#xff0c;国产手机也面临了一个新问题&#xff0c;那就是消费者对于超过3000元的国产旗舰手机都不太接受了&#xff0c;他们选购国产旗舰手机也只买3000元以下的了。 某电商的热销榜TOP10显示&#xff0c;进入榜单…

【Redis数据库百万字详解】数据类型

文章目录 一、字符串类型概述1.1、数据类型1.2、字符串简介1.3、字符串应用场景 二、字符串命令三、哈希类型概述3.1、哈希介绍3.2、哈希类型应用场景3.3、哈希命令 四、列表类型概述4.1、列表简介4.2、使用场景4.3、列表命令 五、集合概述5.1、集合简介5.2、使用场景5.3、集合…

基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga仿真结果 matlab调用FPGA的仿真结果进行图像显示 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ......................…

ElementUI的Table组件在无数据情况下让“暂无数据”文本居中显示

::v-deep .el-table__empty-block {width: 100%;min-width: 100%;max-width: 100%; }

什么是事务性电子邮件

事务性电子邮件&#xff08;Transactional Emails&#xff09;是企业或组织针对客户或会员的特定活动或操作而发送的电邮。这类邮件的目的是通知用户关于账户状态、订单处理、密码重置、服务更新等重要个人信息。事务性邮件旨在辅助完成特定的业务流程或任务&#xff0c;确保用…

47、Flink 的 Data Source 原理

1.Data Source 原理 a&#xff09;核心组件 一个数据 source 包括三个核心组件&#xff1a;分片&#xff08;Splits&#xff09;、分片枚举器&#xff08;SplitEnumerator&#xff09; 以及 源阅读器&#xff08;SourceReader&#xff09;。 分片&#xff08;Split&#xff…

Xcode设置cocoapods库的最低兼容版本

目录 前言 1.使用cocoapods遇到的问题 2.解决办法 1.用法解释 1. config.build_settings: 2.IPHONEOS_DEPLOYMENT_TARGET 2.使用实例 3.注意事项 1.一致性 2.pod版本 前言 这篇文章主要是介绍如何设置cocoapods三方库如何设置最低兼容的版本。 1.使用cocoapods遇到的…

LitCTF2024部分wp

litctf wp 第一次ak了web和misc&#xff0c;非常激动&#xff0c;感谢lictf给我这个机会 最终成果 全靠队里的密码逆向✌带飞。一个人就砍了近一半的分数 这里是我们队的wp web exx 题目名反过来就是xxe&#xff0c;考察xxe&#xff0c;查看登录的数据包 发现传的就是xml…

ast.js是什么?

在devtools分析网站时&#xff0c;出现了ast.js的页面。那么&#xff0c;什么是ast.js?它有什么用&#xff1f; 经查询&#xff0c;AST是抽象语法树&#xff08;Abstract Syntax Tree&#xff09;也称为AST语法树&#xff0c;指的是源代码语法所对应的树状结构。也就是说&…

wandb安装与使用 —— 用于跟踪、可视化和协作机器学习实验的工具

文章目录 一、wandb简介二、wandb注册与登陆&#xff08;网页&#xff09; —— 若登录&#xff0c;则支持在线功能三、wandb安装与登陆&#xff08;命令行&#xff09; —— 若不登录&#xff0c;则只保留离线功能四、函数详解4.1、wandb.init() —— 初始化一个新的 wandb 实…

AI图书推荐:《如何利用ChatGPT在线赚钱》

这本书《如何利用ChatGPT在线赚钱》&#xff08;$100m ChatGPT_ How To Make Money Online With ChatGPT -- Sharp, Biily -- 2023 &#xff09;主要阐述如何利用ChatGPT这一强大的语言模型工具在互联网上创造收入。 以下是各章节内容的概要&#xff1a; **引言** - 介绍了Chat…

批量处理文件名:高效替换与插入文字,优化文件管理新策略,轻松提升工作效率

文件管理成为我们工作中不可或缺的一环。面对大量的文件&#xff0c;如何高效、精准地处理文件名&#xff0c;成为了提升工作效率的关键。今天&#xff0c;我们向您推荐一款能够轻松实现文件名批量处理的神器——文件批量改名高手&#xff0c;助您优化文件管理&#xff0c;提升…

GPT-4 Turbo 和 GPT-4 的区别

引言 人工智能&#xff08;AI&#xff09;领域的发展日新月异&#xff0c;OpenAI 的 GPT 系列模型一直是这一领域的佼佼者。GPT-4 和 GPT-4 Turbo 是目前市场上最先进的语言模型之一。本文将详细探讨 GPT-4 和 GPT-4 Turbo 之间的区别&#xff0c;以帮助用户更好地理解和选择适…

白酒:全球化背景下产地白酒的国际竞争与合作

在全球化背景下&#xff0c;云仓酒庄豪迈白酒作为中国白酒的品牌之一&#xff0c;面临着国际竞争与合作的机遇与挑战。国际市场竞争的激烈以及消费者需求的多样化&#xff0c;要求云仓酒庄豪迈白酒不断提升品质、拓展市场以及加强国际合作&#xff0c;以提升品牌竞争力和市场份…

QQ号码采集器

寅甲QQ号码采集软件, 一款采集QQ号、QQ邮件地址&#xff0c;采集QQ群成员、QQ好友的软件。可以按关键词采集&#xff0c;如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。

图神经网络实战(12)——图同构网络(Graph Isomorphism Network, GIN)

图神经网络实战&#xff08;12&#xff09;——图同构网络 0. 前言1. 图同构网络原理2. 构建 GIN 模型执行图分类2.1 图分类任务2.2 PROTEINS 数据集分析2.3 构建 GIN 实现图分类2.4 GCN 与 GIN 性能差异分析 3. 提升模型性能小结系列链接 0. 前言 Weisfeiler-Leman (WL) 测试…

simplicity studio 5 修改设备电压

工装板的soc额定输入电压为1.5v&#xff0c;而常态下ttl高电平为5v/3.3v&#xff0c;所以需要设定烧录程序时的设备电压。 确保连接设备&#xff0c;并且被识别。 进入管理员模式。 烧录.hex文件快捷方法。