数据结构之二叉树的性质与存储结构

数据结构之二叉树的性质与存储结构

  • 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=1k2i1=2k1 即可。
  (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;

  在不同的存储结构中,实现二叉树的运算方法也不同,具体应采用什么存储结构,除考虑二叉树的形态外还应考虑需要进行的运算特点。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python写完程序怎么运行

python有两种运行方式,一种是在python交互式命令行下运行; 另一种是使用文本编辑器直接在命令行上运行。 注:以上两种运行方式均由CPython解释器编译运行。 当然,也可以将python代码写入eclipse中,用JPython解释器运行&#xff0c…

用el-image-viewer实现全局预览图片

背景 在后台管理系统中,一些预览图片的场景,通常都是使用 el-image-viewer 去实现,但是如果多个地方都需要预览图片,又要重复的去写 el-image-viewer 以及一些重复的和预览相关的代码。 可以把预览图片的组件放在根文件&#x…

MySQL主从集群

MySQL主从集群 主从模式、集群模式,都是在一个项目中使用多个mysql节点进行存储和读取数据。 当单机模式部署,不满足安全性、高可用、高并发等需求的时候,就需要考虑主从模式或者集群模式部署。 什么是主从模式? 主从模式&…

Hadoop基础知识

Hadoop基础知识 1、Hadoop简介 广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说,Hadoop指Apache这款开源框架,它的核心组件有: HDFS(分布式文件系统):解决海量数据存储Y…

EasyRecovery2024数据恢复大师最新版本下载

EasyRecovery可以从初始化的磁盘恢复损坏或删除的文件。该软有易于使用,即使是最缺乏经验的用户也可以轻松恢复数据。一款威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。EasyRecovery 不会向你的原始驱动器写入任何东东,它主…

Canny边缘检测 双阈值检测理解

问题引入 我们用一个实际例子来引入问题 import cv2 import numpy as npimgcv2.imread("test.png",cv2.IMREAD_GRAYSCALE) # 修改图像大小 show cv2.resize(img,(500,500))v1cv2.Canny(show,120,250) v2cv2.Canny(show,50,100)# 连接图像 res np.hstack((v1,v2)…

b+树的理解

二叉树: 每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。 二叉查找树: 在二叉树的基础上增加了一个规则,左子树的所有节点都小于它的根节点,右子树的所有节点都大于他的根节点。 二叉查找树…

基于JavaWeb+SSM+Vue基于微信小程序的在线投稿系统的设计和实现

基于JavaWebSSMVue基于微信小程序的在线投稿系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 MYSQL数据库 3 2.3 u…

SpringSecurity+JWT前后端分离架构登录认证

目录 1. 数据库设计 2. 代码设计 登录认证过滤器 认证成功处理器AuthenticationSuccessHandler 认证失败处理器AuthenticationFailureHandler AuthenticationEntryPoint配置 AccessDeniedHandler配置 UserDetailsService配置 Token校验过滤器 登录认证过滤器接口配置…

linux网络协议栈2--网络包接收发送流程

上文我们讲了报文格式,应该对数据传输格式有了一定了解,这篇文章主要讲述的是网络包接收和发送的流程,主要是大方面来介绍。 网络包接收流程 当网络数据帧通过网络传输到达网卡时,网卡会将网络数据帧通过DMA的方式放到环形缓冲区…

本人最开始使用类GPT做的记录

最开始 最开始时用bing,改了header后可以使用,属于是身边人第一批使用的了,但是后来会报重定向错误,好像是因为微软做了反制措施,需要魔法才可以了然后我又找啊找啊,发现了chathub这个插件,用了…

超过GPT3.5?Mixtral 8*7B 模型结构分析

Datawhale干货 作者:宋志学,Datawhale成员 前言 2023年12月11日,Mistral AI团队发布了一款高质量的稀疏专家混合模型Mixtral 8x7B。 Mistral AI继续致力于向开发者社区提供最优秀的开放模型。在人工智能领域向前发展,需要采取超越…