Day38-【13003】短文,二叉树,完全二叉树,二叉树的顺序存储,和链式存储

news/2025/2/8 11:40:40/

文章目录

    • 第二节 二叉树
      • 二叉树的定义及重要性质
        • n个结点,能组合成多少个不同的二叉树
        • 满二叉树、完全二叉树
        • 完全二叉树的性质
        • 二叉树的性质
          • 二叉树的结点数
          • 完全二叉树的高度
      • 二叉树的存储
        • 顺序存储方式
        • 链式存储方式
          • 二叉链表的程序实现
          • 二叉链表空指针域计算

第二节 二叉树

在这里插入图片描述

二叉树的定义及重要性质

二叉树是结点的一个有限集合,这个集合或者为空,或者由一个根结点以及两棵互不相交的、定义5-2分别称为这个根的左子树和右子树的二叉树组成。左子树和右子树的根分别称为此二叉树根结点的左子结点和右子结点。
二叉树的左子树和右子树都可以存在或者为空,不同的存在状态可以组合出5种基本形态,即两棵子树均为空或均不为空,或者一棵为空、另一棵不为空,还有空树。这5种形态如图5-3所示。

叉树与树有什么关系呢?二叉树允许有空树,而树中至少含有一个结点。从这个方面来看,二叉树并不是树的真子集。除此之外,在概念上,树与二叉树之间也存在差异。对一般的非有序树而言,每个结点的各个子结点之间没有次序,而二叉树中每个结点的子结点都规定了左、右次序。即使是有序树,它与二叉树也略有不同。例如,若有序树中某个结点只有一个子结点,那么这个子结点是其父结点的唯一孩子。但在二叉树中,如果某个结点有一个子结点,那么它可以是其父结点的左子结点,也可以是其右子结点,由此可以对应于两种不同的二叉树树形。例如,图5-3c与图5-3d是两棵完全不同的二叉树。

在这里插入图片描述

n个结点,能组合成多少个不同的二叉树

在这里插入图片描述

满二叉树、完全二叉树

在这里插入图片描述

在这里插入图片描述

完全二叉树的性质

在这里插入图片描述

二叉树的性质
二叉树的结点数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这个性质的含义是,二叉树中叶结点的个数仅与度为2的结点的个数有关,具体来说,叶结点的个数比度为2的结点的个数多1,而与度为1的结点个数无关。

仅增加或减少二叉树中度为1的结点,对二叉树中叶结点的个数没有影响。这个性质也称为满二叉树定理

完全二叉树的高度

在这里插入图片描述

二叉树的存储

与线性表类似,二叉树也有两种存储方式,即顺序存储方式和链式存储方式。

顺序存储方式

先看看特殊的完全二叉树的存储方法。根据完全二叉树的定义,除最后一层以外,其余各层都是满的,而且最后一层的结点自左至右紧密排列。所以,可以使用一维数组依次存储树中各层的各个结点。存储的规则是,各层自上至下、同层间自左至右,将结点依次存入数组从前至后的各个元素中。按照前面使用过的编号方法,编号为i的结点存放在数组中下标为i的位置。例如,图5-5b所示的完全二叉树可以使用具有至少12个元素的一维数组存储,存放的结果如图5-6所示。

在这里插入图片描述

基于这样的存储规则保存的二叉树,可以很方便地在数组中找到二叉树中的相关结点,即若知道二叉树某一结点在数组中的保存位置,则可以计算出其父结点(若存在)和左、右子结点(若存在)在数组中的保存位置。
对于一般的二叉树,顺序存储的思想是,针对二叉树中的每个位置,无论这个位置有没有结点,都在数组中预留保存单元。在采用这种存储方式保存完全二叉树时,既不浪费空间,又便于有关操作的实现。

但是,如果使用这样的存储规则保存一般的二叉树,则可能会出现空间浪费的情况。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

链式存储方式

与二叉树的顺序存储方式相对应的是它的链式存储方式。钱链式存储结构与二又树的实际逻辑结构更加吻合,非常适合于表示二又树。
二叉树的定义规定,每个结点最多有两个子结点,分别是它的左子结点和右子结点。据此,可以这样定义一个结点结构:它含有两个指针域,一个指针用来指向该结点左子结点所在的结点,称为左孩子指针,简称为左指针;另一个指针用来指向该结点右子结点所在的结点,称为右孩子指针,简称为右指针。此外,还定义一个用来保存结点中数据的数据域。所以,每个结点至少包含3个域,分别保存数据、左指针和右指针。由于每个结点都含有两个指针域,故这样的链式结构被形象地称为二叉链表结构。回忆一下,在双向链表中每个结点也含有两个指针域和一个数据域。请考生考虑,使用相同的结点结构构造的双向链表和二叉链表有什么不同?

在这里插入图片描述

二叉链表的程序实现

在这里插入图片描述

二叉链表空指针域计算

在这里插入图片描述


http://www.ppmy.cn/news/1570313.html

相关文章

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…

Unity之VideoPlayer视频播放(二)

一、效果 全屏缩小画面、播放暂停、进度条拖拽、视频播放时长、倍速、音量等功能。 长时间不移动鼠标自动隐藏播放控制器、鼠标离开倍速、音量时隐藏倍速、音量ui 二、脚本 using System; using System.Collections; using System.Collections.Generic; using UnityEngine.UI;…

Maven架构项目管理工具

1.1什么是Maven 翻译为“专家”,“内行”Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。什么是理想的项目构建? 高度自动化,跨平台,可重用的组件,标准化的 什么…

开源AI智能名片2 + 1链动模式S2B2C商城小程序:内容价值创造与传播新引擎

摘要:本文聚焦于信息爆炸时代下,内容价值的创造与传播。随着用户角色的转变,其在内容生产与传播中的价值日益凸显。同时,深入探讨开源AI智能名片2 1链动模式S2B2C商城小程序这一创新商业模式,如何借助用户创造内容并传…

并行计算、分布式计算与云计算:概念剖析与对比研究(表格对比)

什么是并行计算?什么是分布计算?什么是云计算?我们如何更好理解这3个概念,我们采用概念之间的区别和联系的方式来理解,做到切实理解,深刻体会。 1、并行计算与分布式计算 并行计算、分布式计算都属于高性…

【算法专场】分治(下)

目录 前言 归并排序 思想 912. 排序数组 算法思路 算法代码 LCR 170. 交易逆序对的总数 算法思路 算法代码 315. 计算右侧小于当前元素的个数 - 力扣(LeetCode) 算法思路 算法代码 493. 翻转对 算法思路 算法代码 好久不见~时隔多日&…

使用 Axios ——个人信息修改与提示框实现

目录 详细介绍:个人信息设置与修改页面实现 1. HTML 结构 2. CSS 样式 3. JavaScript 核心逻辑 a. 信息渲染与表单提交 b. 头像上传与预览 4. 功能详解 5. 总结 提示: 这段代码展示了如何创建一个简单的个人信息设置页面,包含用户个…

C# LiteDB 使用教程

一、引言 在软件开发中,数据存储和管理是至关重要的一环。对于小型项目或者对性能和便捷性有较高要求的场景,传统的大型数据库可能显得过于笨重。而 LiteDB 作为一款轻量级的嵌入式 NoSQL 数据库,为开发者提供了一个简洁、高效的解决方案。它…