二叉树的定理和存储结构

news2025/1/9 2:05:13

文章目录

  • 前言
  • 一、二叉树的定理
  • 二、满二叉树与完全二叉树
    • 1.满二叉树的定义
    • 2.完全二叉树的定义
    • 3.完全二叉树的特殊定理
  • 三、完全二叉树的存储结构
    • 1.顺序存储结构
    • 2.链式存储结构
  • 总结


前言

  T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版 第2版》严蔚敏。


一、二叉树的定理

  在树和二叉树的定义和基本术语中介绍了二叉树的定义和基本术语。二叉树具有多种定理。
  性质1:在二叉树的第 i 层上至多有 2^( i - 1) (i>=1)个结点。
  性质2:深度为 k 的二叉树至多有 2^k - 1 个结点 (k>=1)。
  性质3:对任何一棵二叉树T, 如果其终端结点(即叶子结点)数为n0,度为2的结点数为n2,则 n0 = n2 + 1。

二、满二叉树与完全二叉树

1.满二叉树的定义

  满二叉树是一种特殊的二叉树:深度为 k 且含有 2^ k - 1个结点的二叉树。其特点是:每一层上的结点数都是最大结点数,即每一层 i 的结点数都具有最大值 2^( i - 1)。
在这里插入图片描述
  对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左至右。由此可引出完全二叉树的定义。

2.完全二叉树的定义

  完全二叉树的定义:深度为 k 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为 k 的满二叉树中编号从 1 至 n 的结点一一对应时, 称之为完全二叉树。(看不懂?简单来说就是完全二叉树每个结点的编号在结点对应位置上是连续的!)
  完全二叉树的特点是:
  (1)叶子结点只可能在层次最大的两层上出现。例如深度为 i 的完全二叉树,其叶子结点只能出现在第 i - 1 层和第 i 层。
  (2)对任一结点,若其右分支下的子孙的最大层次为 l ,则其左分支下的子孙的最大层次必为 l 或 l + 1。(由此才能满足完全二叉树的定义)
在这里插入图片描述
在这里插入图片描述

3.完全二叉树的特殊定理

  性质 4:具有 n 个结点的完全二叉树的深度为 [ lb n ] +1(lb表示以2为底的log)向下取整(即取不大于 lb n 的最大整数再加1)。
  性质 5:如果对一棵有 n 个结点的完全二叉树的结点按层序编号(从上到下, 从左到右), 则对任一结点 i (1<=i<=n), 有:
  (1)如果 i = 1, 则结点 i 是二叉树的根,无双亲;如果 i > 1, 则其双亲是结点 [ i / 2 ](不大于 i / 2 的最大整数)。
  (2)如果 2i > n, 则结点 i 无左孩子(结点 i 为叶子结点);否则其左孩子是结点 2i。
  (3)如果 2i+1 > n, 则结点 i 无右孩子;否则其右孩子是结点 2i+1。
在此省略证明过程,读者可由图5.7直观地看出性质5所描述的结点与编号 的对应关系。

三、完全二叉树的存储结构

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

1.顺序存储结构

  顺序存储结构使用一组地址连续的存储单元来存储数据元素,为了能够在存储结构中反映出结点之间的逻辑关系,必须将二叉树以完全二叉树的形式保存,即结点依照完全二叉树的定义按序号存储。

//-----二叉树的顺序存储表示-----
#define MAXTSIZE 100 
typedef TElemType SqBiTree [MAXTSIZE];   //二叉树的最大结点数
SqBiTree bt;							 //0号单元存储根结点

  对于一般二叉树转化为完全二叉树后空缺的位置,以填充NULL来代替。
在这里插入图片描述
  由此可见,这种顺序存储结构仅适用于完全二叉树。因为,在最坏的情况下,一个深度为K且只有K个结点的单支树(只有左子树或只有右子树,树中不存在度为2的结点),却需要长度为 2^k - 1的一维数组,造成存储空间极大浪费。

2.链式存储结构

  二叉树的结点由一个数据元素和分别指向其左、 右子树的两个分支构成,则表示二叉树的链表中的结点至少包含 3 个域:数据域和左、 右指针域。对于子树不存在的情况,则该指针为空。
  下图所示为二叉链表和三叉链表(额外增加一个指针指向其双亲)的形式。
在这里插入图片描述
  采用二叉链表还是三叉链表,应根据实际应用进行选取。下面为二叉链表的存储表示。

//- - - - -二叉树的二叉链表存储表示- ----
typedef struct BiTNode{ 
TElemType data;      			//结点数据域
struct BiTNode *lchild,*rchild; //左右孩子指针
) BiTNode,*BiTree;

总结

  路漫漫其修远兮,吾将上下而摆烂。(又是划水的一天,water,water,water,water,water…)
  有任何疑问和补充,欢迎交流。(但我显然不会T_T)

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

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

相关文章

经典回溯算法之N皇后问题

问题描述&#xff1a; 有一个N*N的棋盘&#xff0c;需要将N个皇后放在棋盘上&#xff0c;保证棋盘的每一行每一列每一左斜列每一右斜列都最多只能有一个皇后。 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如…

智慧粮库/粮仓视频监管系统:AI视频智能监测保障储粮安全

智慧粮库视频监管系统是一种基于物联网、AI技术和视频监控技术的先进管理系统&#xff0c;主要用于对粮食储存环境进行实时监测、数据分析和预警。TSINGSEE青犀智慧粮库/粮仓视频智能管理系统方案通过部署多区域温、湿度、空气成分等多类传感器以及视频监控等设施&#xff0c;对…

猎头告诉你正确的“离职流程”

往期热门文章&#xff1a; 1&#xff0c;史上最全猎头技能资料&#xff0c;独家最新放送 2&#xff0c;互联网大厂java面试题知识库&#xff08;100万字&#xff09; 3&#xff0c;一线互联网大数据面试题知识库&#xff08;100万字&#xff09; 4&#xff0c;中国猎头公司排行…

Python数据分析的数据导入和导出

数据分析的数据的导入和导出 前言一、导入数据导入Excel表格数据read_excel示例 导入CSV格式数据read_csv&#xff08;&#xff09;示例 导入JSON格式数据JSON简介pandas导入JSON数据read_json&#xff08;&#xff09; 导入txt文件read_table示例 导入&#xff08;爬取&#x…

5月9日不同路径+不同路径Ⅱ

62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#…

<网络安全>《76 概念讲解<第十课 物联网常用协议-网络层协议>》

协议简称全称名称内容说明IPv4互联网通信协议第四版IPv4是互联网的核心IPv6互联网协议第6版TCPTransmission Control Protocol传输控制协议TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务…

【递归、回溯和剪枝】二叉树中的深搜

⼆叉树中的深搜深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀&#xff0c;直到⼀条路径上的所有节点都被遍历完毕&#xff0c;然后…

【AI大模型】AI大模型热门关键词解析与核心概念入门

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

微电子领域常用材料简介(三)氮化镓

微电子领域常用材料简介&#xff08;三&#xff09;氮化镓 氮化镓&#xff08;GaN&#xff09;是一种具有重要战略意义的第三代半导体材料&#xff0c;因其独特的物理和化学性质&#xff0c;在多个领域展现出广泛的应用潜力。 基本特性 宽禁带&#xff1a;氮化镓具有宽带隙&a…

崇贸烧录器支持PUYA普冉半导体的32位微控制器PY32F403R1DT6

芯片烧录行业领导者-崇贸技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中PUYA普冉半导体的32位微控制器PY32F403R1DT6已经被崇贸的通用烧录平台AP8000所支持。 PY32F403R1DT6微控制器是基于ArmCortexM4核的32位通用微控制器产品。内置的FPU和DSP功能…

C语言 变量的作用域

今天 我们来说变量的作用域和存储类型 每种事物 都有自己作用的范围限制 例如 汽车只能在路上跑 轮船只能在海洋 飞机只能通行于天空 函数的参数 也只有在函数被调用过程中分配内存资源 函数执行结束 空间也会被立即释放 这也说明了 行参变量只有在函数内才有效 离开了该函数 …

程序员的实用神器,16款程序员生产力工具推荐

前言 在软件开发的海洋中&#xff0c;程序员的实用神器如同航海中的指南针&#xff0c;帮助他们导航、加速开发、优化代码质量&#xff0c;并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 一、程序员开发工具 Intellij IDEA IntelliJ I…

【Linux网络编程】HTTPS协议

【Linux网络编程】HTTPS协议 目录 【Linux网络编程】HTTPS协议HTTPS介绍加密常见的加密方式HTTPS的工作过程探究&#xff08;重点&#xff09;常见问题完整流程总结 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.5.9 前言&#xff1a;本篇博客将会介绍HTTPS协议 HTTPS…

Linux-笔记 uboot修改设备树

1. FDT介绍 扁平设备树&#xff08;Flattened Device Tree&#xff0c;FDT&#xff09;&#xff0c;也叫平坦设备树&#xff0c;是设备树的一种二进制表示形式&#xff0c;提高了在嵌入式系统中的传输和解析效率&#xff1b; 2. 在U-Boot中使用FDT 2.1. 进入U-Boot 开发板上…

企业级通用业务 Header 处理方案

目录 01: 处理 PC 端基础架构 02: 通用组件&#xff1a;search 搜索框能力分析 03: 通用组件&#xff1a;search 搜索框样式处理 04: 通用组件&#xff1a;Button 按钮能力分析 05: 通用组件&#xff1a;Button 按钮功能实现 06: 通用组件&#xff1a;完善 search 基本…

【漏洞复现】GB28181摄像头管理平台api接口处存在未授权漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

【北京迅为】《iTOP-3588开发板nfstftp烧写手册》

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

力扣HOT100 - 4. 寻找两个正序数组的中位数

解题思路&#xff1a; 两个数组合并&#xff0c;然后根据奇偶返回中位数。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m nums1.length;int n nums2.length;int[] nums new int[m n];if (m 0) {if (n % 2 0) return (nums2…

若依集成mybatis-plus 超详细教程(亲测可用)

文章目录 简介步骤第一步第二步第三步第四步第五步第六步 使用QueryWrapperservice层impl 实现接口类层Mapper层 简介 话不多说 直接跟着下面的教程操作&#xff0c;如果有报错私信我&#xff0c;或者通过博文下面的微信名片加我微信&#xff0c;免费解答哦&#xff01; 步骤 …