数据结构之二叉树的性质与存储结构
数据结构之二叉树的性质与存储结构
- 1、二叉树的性质
- 2、二叉树的存储结构
数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用计算机解决问题的效率服务。
数据结构是指数据元素的集合及元素间的相互关系和构造方法。元素之间的相互关系是数据的 逻辑结构,数据元素及元素之间关系的存储称为 存储结构(或物理结构)。数据结构按照逻辑关系的不同分为 线性结构和 非线性结构两大类,其中,非线性结构又可分为树结构和图结构。
树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系。
二叉树是 n(n≥0)个结点的有限集合,它或者是空树(n=0),或者是由一个根结点及两棵不相交的且分别称为左、右子树的二叉树所组成。可见,二叉树具有递归性质。
1、二叉树的性质
(1)二叉树第 i 层(i≥1)上最多有 2i-1 个结点。
(2)高度为 k 的二叉树最多有 2k-1 个结点 (k≥1)。
由性质 1,每一层的结点数都取最大值 Σ i = 1 k 2 i − 1 = 2 k − 1 {\huge\Sigma}^k_{i=1}2^{i-1} = 2^k-1 Σi=1k2i−1=2k−1 即可。
(3)对于任何一棵二叉树,若其终端结点数为 n0,度为2的结点数为 n2,则n0=n2+1。
(4)具有n 个结点的完全二叉树的深度为[log2n]+1。
若深度为 k 的二叉树有 2k-1 个结点,则称其为满二叉树。可以对满二叉树中的结点进行连续编号: 约定编号从根结点起,自上而下、自左至右依次进行。深度为 k、有 n 个结点的二叉树,当且仅当其每一个结点都与深度为 k 的满二叉树中编号从1至n 的结点一一对应时,称之为完全二叉树。满二叉树如下图 (a)所示,高度为 3 的一个完全二叉树如下图 (b) 所示。

在一个高度为 h 的完全二叉树中,除了第 h 层(即最后一层),其余各层都是满的。在第 h 层上的结点必须从左到右依次放置,不能留空。下图 © 所示的二叉树不是完全二叉树,因为 6号结点的左边有空结点。

2、二叉树的存储结构
(1)二叉树的顺序存储结构
顺序存储是用一组地址连续的存储单元存储二叉树中的结点,必须把结点排成一个适当的线性序列,并且结点在这个序列中的相互位置能反映出结点之间的逻辑关系。
用一组地址连续的存储单元存储二叉树中的结点,必须把结点排成一个适当的线性序列,并且结点在这个序列中的相互位置能反映出结点之间的逻辑关系。对于深度为 k 的完全二叉树,除第k层外,其余各层中含有最大的结点数,即每一层的结点数恰为其上一层结点数的两倍,由此从一个结点的编号可推知其双亲、左孩子和右孩子的编号。
假设有编号为 i 的结点,则有:
● 若 i=1,则该结点为根结点,无双亲;若 i>1,则该结点的双亲结点为[i/2]。
● 若 2≤n,则该结点的左孩子编号为 2i,否则无左孩子。
● 若 2i+1≤n,则该结点的右孩子编号为 2i+1,否则无右孩子。
完全二叉树的顺序存储结构如下图所示。

显然,完全二叉树采用顺序存储结构既简单又节省空间,对于一般的二叉树,则不宜采用顺序存储结构。因为一般的二叉树也必须按照完全二叉树的形式存储,也就是要添上一些实际并不存在的“虚结点”,这将造成空间的浪费,如下图所示。

在最坏情况下,一个深度为 k 且只有 k 个结点的二叉树(单支树) 需要 2k-1 个存储单元。
(2)二叉树的链式存储结构
由于二叉树的结点中包含有数据元素、左子树的根、右子树的根及双亲等信息,因此可以用三叉链表或二叉链表(即一个结点含有 3 个指针或两个指针)来存储二叉树,链表的头指针指向二叉树的根结点,如下图所示。

设结点中的数据元素为整型,则二叉链表的结点类型定义如下:
typedef struct BiTnode{int data;struct BiTnode *lchild,*rchild;
}BiTnode.*BiTree;
在不同的存储结构中,实现二叉树的运算方法也不同,具体应采用什么存储结构,除考虑二叉树的形态外还应考虑需要进行的运算特点。
相关文章:
数据结构之二叉树的性质与存储结构
数据结构之二叉树的性质与存储结构 1、二叉树的性质2、二叉树的存储结构 数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,…...
机器视觉检测设备在连接器外观缺陷检测中的应用
作为传输电流或信号连接两个有源器件的器件,连接器被广泛应用于各个行业,从手机、平板、电脑,到冰箱、空调、洗衣机,再到汽车、国防、航空,处处是它的所在。每个电子产品少了连接器将无法运作,因此…...
ChatGPT vs 文心一言(AI助手全面比较)
随着人工智能的不断发展,ChatGPT(OpenAI)和文心一言都代表了当前先进的自然语言处理技术。它们在智能回复、语言准确性和知识库丰富度等方面都有各自的优势。在下面的比较中,我们将从多个角度探讨这两个AI助手,帮助你更…...
MSPM0L1306例程学习-UART部分(2)
MSPM0L1306例程学习系列 1.背景介绍 写在前边的话: 这个系列比较简单,主要是围绕TI官网给出的SDK例程进行讲解和注释。并没有针对模块的具体使用方法进行描述。所有的例程均来自MSPM0 SDK的安装包,具体可到官网下载并安装: https://www.ti…...
Baichuan2百川模型部署的bug汇总
1.4bit的量化版本最好不要在Windows系统中运行,大概原因报错原因是bitsandbytes不支持window,bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存,offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…...
ChatGPT 如何解决 “Something went wrong. lf this issue persists ….” 错误
Something went wrong. If this issue persists please contact us through our help center at help.openai.com. ChatGPT经常用着用着就出现 “Something went wrong” 错误,不管是普通账号还是Plus账号,不管是切换到哪个节点,没聊两次就报…...
怎么移除WordPress后台工具栏的查看站点子菜单?如何改为一级菜单?
默认情况下,我们在WordPress后台想要访问前端网站,需要将鼠标移动到左上角的站点名称,然后点击下拉菜单中的“查看站点”才行,而且还不是新窗口打开。那么有没有办法将这个“查看站点”子菜单变成一级菜单并显示在顶部管理工具栏中…...
WEB-前端 表格标签-合并单元格
目录 合并单元方式 : 跨行合并 : 跨列合并 : 目标单元格 : 跨行的话 跨列的话 合并的步骤 : 跨行合并 : 跨列合并 : 特殊情况下,可以把多个单元格合并为一个单元格,我们呢先…...
[计算机网络]基本概念
目录 1.ip地址和端口号 1.1IP地址 1.2端口号 2.认识协议 2.1概念: 2.2知名协议的默认端口 3.五元组 4.协议分层 4.1分层的作用 4.2OSI七层模型 4.3TCP/IP五层(四层)模型 编辑4.4网络设备对应的分层: 编辑以下为跨…...
Flutter 综述
Flutter 综述 1 介绍1.1 概述1.2 重要节点1.3 移动开发中三种跨平台框架技术对比1.4 flutter 技术栈1.5 IDE1.6 Dart 语言1.7 应用1.8 框架 2 Flutter的主要组成部分3 资料书籍 《Flutter实战第二版》Dart 语言官网Flutter中文开发者社区flutter 官网 4 搭建Flutter开发环境参考…...
Pixels:重新定义游戏体验的区块链农场游戏
数据源:Pixels Dashboard 作者:lesleyfootprint.network 最近,Pixels 通过从 Polygon 转移到 Sky Mavis 旗下的 Ronin 网络,完成了一次战略性的转变。 Pixels 每日交易量 Pixels 在 Ronin 网络上的受欢迎程度急剧上升…...
【JavaEE】文件操作 —— IO
文件操作 —— IO 1. 文件的属性 文件内容文件大小文件路径文件名称 2. 文件的管理 采用树形结构进行管理。 3. 文件路径 分为两种:相对、绝对路径。 相对路径:相对于当前位置的路径,以“./xxx.xxx”为标志绝对路径:以从盘符…...
推荐新版AI智能聊天系统网站源码ChatGPT NineAi
Nine AI.ChatGPT是基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代…...
学生公寓智能控电系统的重要性
学生公寓智能控电系统石家庄光大远通电气有限公司学生宿舍内漏电,超负荷用电,违规用电等现象一直是困扰后勤管理的普遍问题。随着学生日常生活方式以及生活用品的改变,电脑以及各种电器逐渐的普及,导致用电量与日俱增,…...
使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL
一、网页信息 二、检查网页,找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…...
2018年认证杯SPSSPRO杯数学建模D题(第二阶段)投篮的最佳出手点全过程文档及程序
2018年认证杯SPSSPRO杯数学建模 D题 投篮的最佳出手点 原题再现: 影响投篮命中率的因素不仅仅有出手角度、球感、出手速度,还有出手点的选择。规范的投篮动作包含两膝微屈、重心落在两脚掌上、下肢蹬地发力、身体随之向前上方伸展、同时抬肘向投篮方向…...
软件资源管理下载系统全新带勋章功能 + Uniapp前端
测试环境:php7.1。ng1.2,MySQL 5.6 常见问题: 配置好登录后转圈圈,检查环境及伪静态以及后台创建好应用 上传图片不了,检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图,在前端uitl文件…...
高性能前端UI库 SolidJS | 超棒 NPM 库
SolidJS是一个声明式的、高效的、编译时优化的JavaScript库,用于构建用户界面。它的核心特点是让你能够编写的代码既接近原生JavaScript,又能够享受到现代响应式框架提供的便利。 SolidJS的设计哲学强调了性能与简洁性。它不使用虚拟DOM(Vir…...
聊聊PowerJob的AliOssService
序 本文主要研究一下PowerJob的AliOssService DFsService tech/powerjob/server/extension/dfs/DFsService.java public interface DFsService {/*** 存储文件* param storeRequest 存储请求* throws IOException 异常*/void store(StoreRequest storeRequest) throws IOEx…...
【VRTK】【Unity】【PICO】PICO项目打包后闪退的根本原因
【背景】 一开始打包运行好好的PICO项目,中途用Preview模式开发了一阵后,再次打包就闪退了。 【分析】 项目设置没有动过,那么可能是Preview开发过程中引入的包导致的问题。 【答案】 千万不要在PICO项目中导入Oculus包。我原本想用一些…...
从FPS相机到无人机控制:在Unity中实战Pitch、Yaw、Roll角的应用与调试技巧
从FPS相机到无人机控制:在Unity中实战Pitch、Yaw、Roll角的应用与调试技巧 在游戏开发中,相机控制和物体旋转是构建沉浸式体验的核心技术。无论是第一人称射击游戏中玩家视角的流畅转动,还是飞行模拟器中飞机的真实运动,都离不开对…...
智能体的真正核心:从“会聊天的大模型”到“会做事的系统”
大模型虽能"理解语言、回答问题、生成内容",但仅停留在对话层面无法构成真正智能体。智能体需具备理解目标、感知状态、拆解任务、选择工具、观察反馈、动态修正等闭环能力。其核心结构包括输入感知、记忆、规划、行动、反馈、评估六模块,形成…...
最火的知识付费系统小程序+PC+H5三端数据互通支持采集资源开源版
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 系统含带 裂变模式 可以助力好友来获取资源共享 分站功能 独立后台 会员功能 卡密功能 二级分销功能等 自行研究看 后期有更新新版会在持续发布 目前版本是3.5 是我花三天时间修复的 好多…...
告别645,聊聊698协议:面向对象的电表通信到底好在哪?
698协议深度解析:面向对象设计如何重塑电表通信生态 当电力行业从单向计量迈向双向互动时,传统645协议的数据标识系统开始显露出架构层面的局限性。某省级电网公司的技术团队在2020年做过一次压力测试:在使用645协议的场景下,要实…...
深度解析Py-ART雷达数据处理:从数据校正到高级反演的全流程实战
深度解析Py-ART雷达数据处理:从数据校正到高级反演的全流程实战 【免费下载链接】pyart The Python-ARM Radar Toolkit. A data model driven interactive toolkit for working with weather radar data. 项目地址: https://gitcode.com/gh_mirrors/py/pyart …...
免费开源!掌握AMD Ryzen处理器深度调试:SMUDebugTool终极指南
免费开源!掌握AMD Ryzen处理器深度调试:SMUDebugTool终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项…...
Phyphox实验避坑指南:测声速时管长、温度、管口校正那些事儿
Phyphox声速测量实验的进阶精度优化手册 在物理实验教学中,声速测量一直是验证波动理论的基础实践。但当智能手机传感器遇上共振管法,看似简单的实验背后藏着诸多魔鬼细节——管口切割的平整度会引入0.5%的误差,手掌温度能在3分钟内使铝管共振…...
AI微型赛车:从车道线检测到PID控制,手把手实现端侧自动驾驶
1. 项目概述:当AI遇见指尖上的速度与激情最近在创客圈和AI应用领域,一个结合了硬件、软件与智能算法的项目正悄然兴起,那就是“AI驱动的自动微型赛车”。这听起来像是科幻电影里的场景,但如今,借助开源硬件和成熟的机器…...
华为BGP路由实战:从原理到策略调优的深度解析
1. 华为BGP路由技术入门指南 第一次接触华为BGP路由配置时,我被那些专业术语搞得晕头转向。经过多次实战后才发现,BGP就像互联网世界的邮局系统,负责在不同自治系统(AS)之间传递路由信息。华为设备的BGP实现特别适合企…...
FreeRTOS移植避坑指南:当你的芯片不在官方支持列表时(以S3C2440为例)
FreeRTOS移植实战:非官方支持芯片的定制化开发方法论 当你的项目需要将FreeRTOS移植到非官方支持芯片时,整个过程就像在未知海域航行——没有现成的海图,但掌握正确的导航方法同样能到达目的地。以经典的ARM9芯片S3C2440为例,这种…...
