数据结构C++——二叉树和树

news2024/9/21 15:40:00

文章目录

  • 一、树
  • 二、二叉树
  • 三、二叉树的特性
    • 特性1. 包含n (n> 0 )个元素的二叉树边数为n-1
    • 特性 2: 若二叉树的高度为h,h≥0,则该二叉树最少有h个元素,最多有2^h-1 个元素
    • 特性3:包含n(n≥0)个元素的二叉树的高度最大为n,最小为ceiling(log2(n+1))
    • 特性4. 完全二叉树
  • 四、二叉树的描述
    • 4.1 数组描述
    • 4.2 链表描述
  • 五、二叉树常用操作
  • 六、二叉树遍历
    • 6.1 preOrder前序遍历
    • 6.2 inOrder中序遍历
    • 6.3 postOrder后序遍历
    • 6.4 层次遍历
    • 6.5 性能比较
    • 6.6 数学表达式的遍历
  • 七、二叉树ADT
  • 八、树和森林的二叉树描述
  • 九、应用
    • 9.1 信号放大器
    • 9.2 并查集,等价类

一、树

用来描述具有层次结构的数据。

比如:家庭关系、公司组织……
在这里插入图片描述
在这里插入图片描述

DEF.
树(tree)t是一个非空有限元素的集合.

  • 其中一个元素为(root).
  • 其余的元素(如果有的话)组成t的子树(subtrees)
  • 层次中最高层的元素为根 (root) 。
  • 其余的元素分成不相交的集合。
  • 根的下一级的元素是根的孩子(children) , 是余下元素所构成的子树的根
  • 树中没有孩子的元素称为叶子(leaves)
  • (level)/层次:指定树根的级为1,其孩子(如果有)的级为2。 一个元素的级=其父母的级+1
  • 二叉树的高度(height)或深度(depth)是指该二叉树的级数(或层数)
  • 元素的(Degree of an element):是指其孩子的个数
  • 树的度(The degree of a tree):是其元素度的最大值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、二叉树

DEF.

  • 二叉树( binary tree) t 是有限个元素的集合(可以为)。
  • 当二叉树非空时,其中有一个称为(root)的元素,余下的元素(如果有的话)被分成2个二叉树,分别称为t的左子树右子树

二叉树 VS 树:

  • 子树个数:二叉树中每个元素都恰好有两棵子树(其中一个或两个可能为空)。而树中每个元素可有任意多个子树
  • 有序性:在二叉树中每个元素的子树都是有序的,也就是说,可以用左、右子树来区别。而树的子树间是无序

二叉树经常用来表示数学表达式,称为表达式树。
在这里插入图片描述

三、二叉树的特性

特性1. 包含n (n> 0 )个元素的二叉树边数为n-1

证明:

  • 二叉树中每个元素(除了根节点) 有且只有一个父节点
  • 在子节点与父节点间有且只有一条边
  • 因此,边数为n-1

特性 2: 若二叉树的高度为h,h≥0,则该二叉树最少有h个元素,最多有2^h-1 个元素

最少:
在这里插入图片描述

最多:满二叉树
在这里插入图片描述

特性3:包含n(n≥0)个元素的二叉树的高度最大为n,最小为ceiling(log2(n+1))

高度最大:
在这里插入图片描述

高度最小:

在这里插入图片描述

特性4. 完全二叉树

满二叉树

  • 高度为h的二叉树恰好有 2 h − 1 2^h-1 2h1个元素时,称其为 满二叉树(full binary tree).
  • 对高度为h 的满二叉树中的元素按从上到下, 从左到右的顺序从1到 2 h − 1 2^h-1 2h1 进行编号
    在这里插入图片描述

完全二叉树

  • 从满二叉树中删除k个元素,其编号为 2 h − i 2^h-i 2hi, 1≤i≤k,所得到的二叉树被称为完全二叉树(complete binary tree)
  • 也就是说从最右一个叶节点开始依次连续向左、向上删除
  • 即:深度为k具有n个节点的二叉树是一颗完全二叉树,当且仅当它与k层满二叉树前1~n个节点所构成的二叉树结构相同
  • k层完全二叉树:
    1)前k-1层为满二叉树;
    2)第k层上的节点都连续排列于第k层的左端
  • 满二叉树是完全二叉树的一个特例
  • 有n个元素的完全二叉树的深度为 c e i l i n g ( l o g 2 ( n + 1 ) ) ceiling(log_2(n+1)) ceiling(log2(n+1))

在这里插入图片描述

完全二叉树的特性
设完全二叉树中一元素的序号为i, 1≤i≤n。则有以下关系成立

  1. 当i = 1时,该元素为二叉树的根。若i >1,则该元素父节点的编号为 f l o o r ( i / 2 ) floor(i/2) floor(i/2)
  2. 当2i >n时,该元素无左孩子。否则,其左孩子的编号为2i
  3. 若2i+1>n,该元素无右孩子。否则,其右孩子编号为 2i+1

四、二叉树的描述

两种描述方法:

  • 数组描述
  • 链表描述(常用)

4.1 数组描述

完全二叉树

  • 按照二叉树对元素的编号方法,将二叉树的元素存储在数组中
  • 编号 与 数组下标 对应

在这里插入图片描述

普通二叉树:可以看作是缺少了部分元素的完全二叉树

在这里插入图片描述

评价

  • 一个有n个元素的二叉树需要存储空间: [ n + 1 , 2 n ] [n+1 , 2^n] [n+1,2n] (或 [ n , 2 n − 1 ] [n , 2^n -1] [n,2n1] )
  • 右斜(Right-skewed)二叉树存储空间达到最大(只有右子树)
  • 缺少的元素数目比较少时,数组描述方法是有效的

4.2 链表描述

最常用。

每个元素存储在一个节点内,节点的结构:

在这里插入图片描述
在这里插入图片描述

链表二叉树的节点结构:

template<class T>
class binaryTreeNode{
   
	// 元素值
	T element;
	// 指向孩子节点的指针
	binaryTreeNode<T> *leftChild, *rightChild;
	
	// 3个构造函数
	// 无参数
	binaryTreeNode(){
   
		leftChild = rightChild = NULL; 
	}
	// 只有数据参数
	binaryTreeNode(const T& theEle

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

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

相关文章

基于微信小程序+SpringBoot+Vue的高校校园交友(带1w+文档)

基于微信小程序SpringBootVue的高校校园交友(带1w文档) 基于微信小程序SpringBootVue的高校校园交友(带1w文档) 在目前的情况下&#xff0c;可以引进一款高校校园交友微信小程序这样的现代化管理工具&#xff0c;这个工具就是解决上述问题的最好的解决方案。它不仅可以实时完成…

代码随想录 day 21 二叉树

第六章 二叉树part08 669. 修剪二叉搜索树 这道题目比较难&#xff0c;比 添加增加和删除节点难的多&#xff0c;建议先看视频理解。 题目链接/文章讲解&#xff1a; https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html…

行业、客户双认可!路凯智行精彩亮相新疆煤博会

7月18日&#xff0c;2024丝路矿业合作论坛、第14届中国新疆国际矿业与装备博览会、第19届中国新疆国际煤炭工业博览会在新疆国际会展中心举行&#xff0c;此次论坛和展会吸引了全国26个省区市和德国、美国、日本、挪威、芬兰、法国、巴基斯坦、俄罗斯、白俄罗斯、乌兹别克斯坦等…

企业如何应对大模型落地的四大挑战?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术取得了突飞猛进的发展&#xff0c;其中大模型&#xff08;如GPT-3、GPT-4、BERT等&#xff09;因其强大的数据处理和分析能力&#xff0c;受到了企业的高度重视。大模型在自然语…

使用nginx实现一个端口和ip访问多个vue前端

前言&#xff1a;由于安全组要求&#xff0c;前端页面只开放一个端口&#xff0c;但是项目有多个前端&#xff0c;此前一直使用的是一个前端使用单独一个端口进行访问&#xff0c;现在需要调整。 需要实现&#xff1a;这里以80端口为例&#xff0c;两个前端分别是&#xff1a;p…

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下&#xff0c;在这个系列的文章中&#xff0c;我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…

可以免费合并pdf的软件 合并pdf文件的软件免费 合并pdf的软件免费

在数字化办公的今天&#xff0c;pdf格式因其稳定性和跨平台兼容性被广泛使用。然而&#xff0c;当我们需要将多个 pdf 文件合并为一个时&#xff0c;却往往感到力不从心。本文将为你介绍几款强大的pdf文件合并软件&#xff0c;让你轻松管理文档。 方法一、使用pdf转换器 步骤1…

Vue3 对比 Vue2

相关信息简介2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09; 2 年多开发, 100位贡献者, 2600次提交, 600次 PR、30个RFC Vue3 支持 vue2 的大多数特性 可以更好的支持 Typescript&#xff0c;提供了完整的…

亚马逊跟卖北美选品ERP操作注意事项,商标自动查询,可...

新手在美国站选品有哪几种方式呢&#xff1f;美国商标局复查未备案准确度100%。 今天来讲下美国品牌未备案准不准确。 点开采集任务&#xff0c;站点选择美国&#xff0c;有五种采集方式&#xff1a;关键词、店铺链接、类目asin&#xff0c;选择完之后点确定。 选择asin采集…

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…

只需三步,即可使用 Kafka 托管服务快速部署微服务架构应用

微服务架构的应用程序的特点是将其组件组织得能够独立地进行开发、测试、部署和扩展。DigitalOcean App Platform&#xff08;应用平台&#xff09;的目标是通过允许用户在同一应用上添加多个组件&#xff0c;简化这一架构模型&#xff0c;使其更加平滑和易于管理。 一个简单的…

【Zotero插件】Zotero Tag为文献设置阅读状态 win11下相关设置

【Zotero插件设置】Zotero Tag为文献设置阅读状态 win11下相关设置 1.安装Zotero Tag1.1安装1.2配置1.3 win11的相关设置1.3.1 字体安装 参考教程 2.支持排序的标注参考教程 1.安装Zotero Tag 1.1安装 Zotero Tag插件下载链接安装方法&#xff1a;Zotero–》工具–》附加组件…

day1 测试基础知识

1. 阐述软件生命周期都有哪些阶段&#xff1f;常见的软件生命周期模型有哪些&#xff1f; 2.常见测试模型有哪些&#xff1f; 参考链接&#xff1a;系统测试中的W模型---测试和开发相结合_开发和测试同时进行-CSDN博客 V模型 W模型&#xff08;测试与开发并行&#xff09; …

【ROS2】高级:安全-部署指南

目标&#xff1a;了解将安全工件部署到生产系统时的最佳实践。 教程级别&#xff1a;高级 时间&#xff1a;20 分钟 内容 背景 先决条件 一般准则构建部署场景 生成 Docker 镜像理解 compose 文件 运行示例 检查容器 背景 典型的部署场景通常涉及将容器化的应用程序或软件包发送…

高校体育场小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;状态管理&#xff0c;学生管理&#xff0c;用户管理&#xff0c;体育场管理&#xff0c;用户订单管理&#xff0c;学生订单管理&#xff0c;评价信息管理&#xff0c;交流论坛&#xff0c;系统管理 微…

4 种在 Windows 11/10/8/7 上恢复永久删除文件的可靠方法

您是否在 Windows 11/10/8/7 中从桌面永久删除了重要文件&#xff1f;当您不小心删除文件然后意识到以后需要它们时&#xff0c;这可能是一个真正的痛苦。但别担心&#xff0c;您可以使用多种方法从Windows PC恢复永久删除的文件。在这篇博文中&#xff0c;我们将为您提供 4 种…

机器学习 | 回归算法原理——最小二乘法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。很早便想学习并总结一本很喜欢的机器学习图书——立石贤吾的《白话机器学习的数学》&#xff0c;可谓通俗易懂&#xff0c;清晰形象。那就在此分享并作为学习笔记来记录我的学习过程吧&#xff01;本章的回归算法原理基于《基于…

Flutter Hive NoSql 数据库使用指南

Flutter Hive NoSql 数据库使用指南 视频 https://www.bilibili.com/video/BV1yJ4m1u7P2/ https://youtu.be/UJobRKdp68k 前言 原文 https://ducafecat.com/blog/flutter-hive-nosql-guide 本文将会写一个 Hive CURD 的例子&#xff0c;详细介绍 Hive 这个轻量级的 Flutter …

解决element-plus的Date Picker日期选择器组件禁用时间的坑

目前需求是有一个表单&#xff0c;其中有多个日期组件需要选择时间范围&#xff0c;并且选择的范围不可以有交集重复&#xff0c;所以这里需要用到Date Picker中的disabled-date属性&#xff0c;来判断该日期是否被禁用。 直接上代码&#xff0c;这个是我写的demo代码&#xf…

基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF.仿真输出误差收敛曲线和误差协方差收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022…