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

news2024/11/19 3:47:34

文章目录

  • 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.coloradmin.cn/o/1338207.html

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

相关文章

红队打靶练习:DIGITALWORLD.LOCAL: FALL

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 6、小结 目录探测 1、gobuster 2、dirsearch WEB 80端口 /test.php 文件包含漏洞 SSH登录 提权 get root and flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interfa…

Qt Creator可视化交互界面exe快速入门3

上一期介绍的通过Qt Creator的组件直接拖拽的方式完成了一个界面,这期介绍按钮的信号交互。 专有名称叫信号与槽 实现方法1: 鼠标右键选择转化为槽就会跳出这样的界面 选择第一个为单击信号。然后就会跳转到代码界面。多了on_pushButton_clicked()。 …

问题解决 | Ubuntu重启无法进入系统

Ubuntu18.04重启无法进入系统,重开后如图 一直在加载系统内核4.15.0-213-generic,无法加载 错误原因 原本的系统是Ubuntu16.04,使用命令升级到Ubuntu18.04版本,升级重启后,远程无法连接! 错误解决 第一步:进入GRUB…

模型量化 | Pytorch的模型量化基础

官方网站:Quantization — PyTorch 2.1 documentation Practical Quantization in PyTorch | PyTorch 量化简介 量化是指执行计算和存储的技术 位宽低于浮点精度的张量。量化模型 在张量上执行部分或全部操作,精度降低,而不是 全精度&#xf…

【网络安全 | 网络协议】结合Wireshark讲解IP协议

前言:IP协议传输过程与数据分片 当我们进行数据传输时,操作系统会创建一个 ICMP Echo Request 数据包,并在该数据包中包含要发送的目标 IP 地址。然后操作系统将数据包传递给网络协议栈,该数据包被封装成 IP 数据包。IP 数据包的…

SpringBoot3 整合Swagger

OpenAPI 3 与 Swagger Swagger 可以快速生成实时接口文档&#xff0c;方便前后开发人员进行协调沟通。遵循 OpenAPI 规范。 文档&#xff1a;https://springdoc.org/v2/ 1. OpenAPI 3 架构 2. 整合 导入场景 <dependency><groupId>org.springdoc</groupId>…

初见 Amazon Q

前言 如果今年要写一篇年终总结的话&#xff0c;生成式 Ai 一定是绕不过的一个话题&#xff0c;自从去年的 chatGPT 火爆全球后&#xff0c;今年各种生成式 Ai 的产品络绎不绝地出现大众视线&#xff0c;版本迭代的速度也是非常快&#xff0c;大家甚至开始在自己的生活和工作中…

【星海随笔】网络运维

[rootlocalhost ~]# source admin-openrcRabbitMQ 工作机理 1.客户端连接到消息队列服务器&#xff0c;打开一个channel。 2.客户端声明一个exchange&#xff0c;并设置相关属性。 3.客户端声明一个queue&#xff0c;并设置相关属性。 4.客户端使用routing key&#xff0c;在ex…

教程分享:如何将音频生成二维码?

音频二维码正在各行各业发挥着重要的作用。比如出版图书中的发音讲解二维码&#xff1b;艺术展博物馆展览中的音频讲解二维码&#xff1b;在线音乐教学通过音频二维码向学员提供教学资料&#xff1b;品牌在创意广告中使用音频二维码向客户提供定制二维码祝福…… 其实&#xf…

HTML---定位

目录 文章目录 一.定位属性概述 二.position 基础数值 三.z-index属性 网页元素透明度 练习 一.定位属性概述 HTML中的定位属性指的是用来控制HTML元素在页面中的位置和布局的属性&#xff0c;包括position、top、bottom、left和right等。 position属性指定了元素的定位方式&a…

Dynamic Wallpaper:打造个性化的 macOS 桌面体验

概述 在日常使用电脑的过程中&#xff0c;桌面背景往往是我们接触最频繁的元素之一。传统的静态壁纸已经无法满足用户对于个性化和创意的追求。于是&#xff0c;一款名为 "Dynamic Wallpaper" 的 macOS 上的动态壁纸软件应运而生。本文将详细介绍 Dynamic Wallpaper…

STM32 cubeMX 人体红外模块实验

本文代码使用HAL库。 文章目录 前言一、人体红外模块介绍工作原理&#xff1a; 二、人体红外原理图解读三、STM32 cubeMX配置红外模块四、代码编写总结 前言 实验开发板&#xff1a;STM32F051K8。所需软件&#xff1a;keil5 &#xff0c; cubeMX 。实验目的&#xff1a;了解 人…

【xdma】 pcie.bar设置

FPGA优质开源项目– PCIE通信 xdma 两者保持一致 FPGA开源项目 – PCIE I/O控制卡 xdma PCIe的XDMA应用 读写部分分为两种&#xff0c;一种是数据的读写&#xff0c;另一种是配置数据的读写&#xff0c;在数据读写部分&#xff0c;DMA通过MIG控制DDR完成数据读写。配置数…

C/C++ 函数指针

如果未提到函数指针&#xff0c;则对C或C函数的讨论将是不完整的。我们将大致介绍一下这个主题&#xff0c;将完整的介绍留给更高级的图书。与数据项相似&#xff0c;函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。通常&#xff0c;这些地址对用户而言&#…

CTF特训(一):ctfshow-RCE挑战

CTF特训(一)&#xff1a;ctfshow-RCE挑战 FLAG&#xff1a;可后来&#xff0c;除了梦以外的地方&#xff0c;我再也没有见过你 专研方向: 代码审计&#xff0c;PHP 每日emo&#xff1a;其实挺迷茫的&#xff0c;不知道该干什么,(骗你的) RCE挑战1 <?phperror_reporting(0)…

Leetcode算法系列| 6. Z 字形变换

目录 1.题目2.题解C# 解法一&#xff1a;利用二维矩阵模拟C# 解法二&#xff1a;压缩矩阵空间Python3 解法三&#xff1a;直接构造 1.题目 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING”…

分享63个Python爬虫源码总有一个是你想要的

分享63个Python爬虫源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 源码下载链接&#xff1a;https://pan.baidu.com/s/1zzd727NQXatL2fnwEFDzlA?pwd6666 提取码&#xff1a;6666 项目名称 163云爬虫…

【Java、Python】获取电脑当前网络IP进行位置获取(附源码)

我相信看到这篇博客的时候心里肯定是想解决自己的一个问题的&#xff0c;而这篇博客我就以简单快速的方式解决这些烦恼&#xff01; 一、获取当前IP 在Java中自带了一些自己的流对象来获取当前的IP地址&#xff0c;不多说我们直接上代码。 //获取当前网络ip地址 ipAddress Ine…

Dubbo 快速上手

文章目录 1.概念1.1 核心功能1.2 架构演变1.2.1 单一应用框架1.2.2 垂直应用框架1.2.3 分布式应用架构(RPC)1.2.4 流动计算架构(SOA) 2.RPC2.1 概念2.2 流程2.3 RPC需要解决的问题 3.Dubbo作用4.Dubbo 和 Spring Cloud区别5.Dubbo技术架构5.1 组件说明5.2 调用关系说明5.3 发布…

用户接入与认证配置-AAA简介

访问控制是用来控制哪些用户可以访问网络以及可以访问的网络资源。AAA是Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;和Accounting&#xff08;计费&#xff09;的简称&#xff0c;提供了在NAS&#xff08;Network Access Server&a…