[数据结构]树与二叉树的性质

文章目录

  • 0.二叉树的形态和基本性质
  • 1.完全二叉树的叶子节点个数
  • 2.树的叶子节点个数
  • 3.线索二叉树
  • 4.树和森林和二叉树
  • 5.平衡二叉树的最少结点数
  • 6.树/二叉树/森林的转换

0.二叉树的形态和基本性质

  1. 一棵二叉树具有5中基本形态
  2. n个结点可以构造的二叉树种数: C2n-n/n+1

一棵树 n个结点

  1. n-1条边: 每一个结点头上都有一个边 除了根节点
  2. 对于二叉树 度数和 == n-1 每一条边就是一个度
  3. x0 = x2 + 1
  4. 边数 == 2x2 + x1

先根遍历和后根遍历序列完全相反

  1. 该树高度 == 结点数
  2. 该树只有一个叶子结点

对于二叉树的先/中/后根遍历

顺序完全一样 只不过根的位置不同

二叉树只有度为0和2的结点 二叉树结点个数至少为

2(h-1) + 1 : 第一层为1个 其余均为2个

二叉树的后序遍历非递归算法不使用栈

最佳方案是采用三叉链表

1.完全二叉树的叶子节点个数

  1. 假设
    叶子节点即度为0的有n0个
    度为1的节点个数为n1
    度为2的节点个数为n2
  2. 对于二叉树:
    n0+n1+n2=n
    n0=n2+1
    ===>n0=(n+1-n1)/2
  3. 对于完全二叉树:
    n1=0 或 1
  4. 总结:
    n1=0或者n为奇数 ==> n0 = (n+1)/2
    n1=1或者n为偶数 ==> n0 = n/2

2.树的叶子节点个数

设树T的度为4,其中度为1、2、3、4的结点个数分别为4、2、1、1。则T中有多少个叶子结点?

  1. n = n0 + n1 + n2 + n3 + n4 = n0 + 8
  2. 边数 = n - 1 且 度数和 = n - 1 ==> n = 度数和 + 1
  3. n = 14+22+31+41+1 = 16
  4. x0 == 8

3.线索二叉树

虽然在中序遍历时具有一定的优势,但也存在一些问题无法解决,包括以下几个方面:

  1. 插入和删除操作麻烦且速度较慢:由于线索二叉树中每个结点都需要维护前驱和后继指针,因此在插入和删除结点时需要更新这些指针,操作相对复杂且速度较慢。

  2. 线索子树不能共用:线索二叉树中的线索只能在某种遍历方式下使用,而不能在其他遍历方式下使用。这意味着如果需要在不同的遍历方式下使用线索,就需要对二叉树进行多次线索化,导致额外的时间和空间开销。

  3. 不支持动态结点的插入和删除:线索二叉树的线索化过程是在遍历过程中完成的,因此无法在遍历过程中动态地插入和删除结点。如果需要在遍历过程中动态地修改二叉树的结构,就需要重新线索化整个二叉树,效率较低。

  4. 需要额外的存储空间:线索二叉树中每个结点都需要维护前驱和后继指针,这会占用额外的存储空间。尤其是在结点较多的情况下,额外的存储空间开销会比较大。

综上所述,线索二叉树虽然在中序遍历时具有一定的优势,但在插入和删除操作、线索共用、动态结点修改和额外存储空间等方面存在一些问题无法解决。

不能有效解决先序线索二叉树找先序前驱和后序线索二叉树找后序后继。

4.树和森林和二叉树

  1. 求一个有 n 个非终端结点的森林/树对应的二叉树中右指针域为空的结点个数

n+1

  1. 树的先根遍历与其对应的二叉树先序遍历序列相同
  2. 树的后根遍历与其对应的二叉树中序遍历序列相同

对于一个有N个结点、K条边的森林,求有几棵树

假设有m棵树,第i棵树的节点数为ni ==> 第i棵树的边数为ni-1。
(n1 - 1) + … + (nm - 1) = K ⇒ N - m = K ⇒ m = N - K

5.平衡二叉树的最少结点数

F(n) = F(n-1) + F(n -2 ) + 1

F(1) = 1
F(2) = 2
F(3) = 4
F(4) = 7

最多即为满二叉树

6.树/二叉树/森林的转换

  1. 树变二叉树 : 兄弟相连留长子
    在这里插入图片描述
  2. 二叉树变树 : 左孩右右连双亲 去掉原来右孩线
    在这里插入图片描述
  3. 森林变二叉树: 各个树先变成二叉树 二叉树根相连
    在这里插入图片描述
  4. 二叉树变森林: 根的右子树独立成根 各个二叉树变树
    在这里插入图片描述

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

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

相关文章

SpringBoot3 整合Kafka

官网:https://kafka.apache.org/documentation/ 消息队列-场景 1. 异步 2. 解耦 3. 削峰 4. 缓冲 消息队列-Kafka 1. 消息模式 消息发布订阅模式,MessageQueue中的消息不删除,会记录消费者的偏移量 2. Kafka工作原理 同一个消费者组里的消…

Volume Control 2

为游戏添加音乐和音效总是需要一些编码来设置一个系统来控制、显示和保存应用程序的音量设置。 音量控制的设计是为了立即为您设置这些内容,让您有更多时间专注于最重要的事情——制作出色的游戏! 在版本2中,我们对系统进行了重新设计,使其更加模块化、灵活,甚至更易于使用…

工具系列:TimeGPT_(1)获取token方式和初步使用

文章目录 介绍获取Token用法数据的重要要求使用DateTime索引推断频率。 介绍 Nixtla的TimeGPT是一种用于时间序列数据的生成式预训练预测模型。TimeGPT可以在没有训练的情况下,仅使用历史值作为输入,为新的时间序列生成准确的预测。TimeGPT可以用于各种…

ubuntu磁盘管理常用命令

写的不全,后面随时修改。 Linux 磁盘管理常用三个命令为 df、du 和 fdisk。 df(英文全称:disk free):列出文件系统的整体磁盘未使用量du(英文全称:disk used):检查磁盘空…

Bytebase:统一数据库 CI/CD 解决方案 | 开源日报 No.128

bytebase/bytebase Stars: 7.9k License: NOASSERTION Bytebase 是一个数据库 CI/CD 解决方案,为开发人员和 DBA 提供统一的工具来管理不同数据库系统的开发生命周期。其主要功能包括标准化操作流程、SQL 代码审查、GitOps 集成以及数据访问控制等。关键特性和核心…

QT 输入框输入限制 正则表达式限制 整理

在使用 输入数值时,经常遇到限制其范围的需要,比如角太阳高度角范围为[-90,90],经度值范围[-180,180],方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围,如使用QIntValidator限制整数…

TypeScript学习笔记归纳(先做基础梳理,后期不断丰满,持续更新ing)

文章目录 前言 二、TypeScript的优势体现在哪里? 1、执行时间上的区别 2、基础数据类型区别 3、TS优势 三、TypeScript的关键特性 四、TypeScript的类型系统 1、什么是类型注释? 2、类型系统核心 - 常用类型 1) 基本类型&#xff0…

计网03-数据的封装和解封装

数据封装和解封装的过程 实例:有两台电脑 PC1和PC2,PC1要给PC2发送一个文本文件 1、数据的封装过程: 应用层:将原始数据转换成计算机能识别的二进制数传输层:在传输层是有固定的传…

为什么说依赖抽象就变得更加灵活呢?举例

说依赖抽象变得更加灵活的主要原因在于它提供了更大的替换和扩展的空间。让我们通过一个简单的例子来说明: 考虑一个电商系统,其中有一个OrderProcessor类负责处理订单,它依赖于一个PaymentGateway用于处理支付。最初的设计可能如下所示&…

LabVIEW进行激光斑点图像处理与分析

LabVIEW进行激光斑点图像处理与分析 近年来,激光技术的应用日益繁荣。激光光斑的质量评估和分析技术决定了应用效果,对机器视觉、武器装备、光学测量和医疗设备产生深远影响。就具体用途和技术而言,激光光斑的采集和处理至关重要。即插即用的…

渗透测试 | php的webshell绕过方法总结

目录 1.php的异或运算 2.通过获取注释去绕过 3.利用字符的运算符​​​​​​​ 4.通过end函数代替[] 5.通过常量去绕过 6.字符串拼接双美元符 7.通过函数定义绕过 8.通过类定义,然后传参分割 9.多传参方式绕过​​​​​​​ 10.通过get_defined_function…

使用Maven Archetype插件制作项目脚手架(一)

Archetype是一个Maven项目模板工具包。通过Archetype我们可以快速搭建Maven项目。比如我们在ide里面创建项目时,可以选择很多maven内置的Archetype,我们最常用的可能是maven-archetype-quickstart 当然maven提供了能力,让我们自定义项目结构&…

帮我超越技术壁垒的“泰斗”服务--Amazon ElastiCache

前言 作为开发者,外加上云服务的使用者,对于借助云服务来提升日常开发中的效率是一个非常关键且重要的事情。在日常实际开发中,关于缓存服务领域想必作为开发者应该都不陌生,比如常用到的 Redis 就是缓存服务之一。对于互联网领域…

使用ffmpeg实现视频旋转并保持清晰度不变

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i source.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-…

Gin框架之使用 go-ini 加载.ini 配置文件

首先,联想一个问题,我们在部署服务时,通常为了方便,对于需要迭代更新的代码进行修改,但是比对shell,可以搞一个变量将需要修改的,以及修改起来变动处多的,写在变量内,到时候如果需要变更,可以直接变更变量即可; 那么,golang有没有什么方式可以将需要变的东西保存起…

数据库基础面试第二弹

1. 乐观锁和悲观锁的理解及使用 乐观锁和悲观锁是在并发编程中使用的两种并发控制机制,用于解决多线程或多进程环境下的数据一致性问题。 1. 悲观锁(Pessimistic Locking):   悲观锁的思想是假设并发访问会导致冲突&#xff0…

贪吃蛇小游戏的代码实现之知识点铺垫篇

今天给大家介绍一个很经典的小游戏,它和扫雷在经典小游戏这方面可以说是旗鼓相当,它的名字就是贪吃蛇。贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩法。该游戏具体玩法是:用游戏把子上下左右控…

前端常用的工具网站

前端常用的工具网站🔖 文章目录 前端常用的工具网站🔖1. 图片在线压缩2. iconfont--矢量图标3. JSON在线格式化4. EMOJIALL--表情符号5. removebg--去除图片背景6. FREE API--免费API接口7. Lorem picsum --随机图片8.UU在线工具 -- 聚合工具 1. 图片在线…

生活服务网站搭建的作用是什么

如今生活服务商家面临获客、信息展示及多渠道传播信息的难题,传统线下形式如街道发传单、人口相传等形式非常低效,容易投入成本得不到回报,且数据难以统计。 互联网时代,线上渠道平台汇聚亿级流量,生活服务商家也需要一…

C++ std::string使用效率优化

字符串操作是任何一个C开发程序无法绕过的点,很多时候针对字符串的操作需要进行优化,从而达到更优的使用效率和内存利用率。一般会采用标准的std::string替代C字符串,一方面是std::string为一个成熟的类对象,其成员操作基本能满足…