数据结构:二叉树基础

news2025/8/12 0:08:34

文章目录

    • 一.二叉树的概念及结构
    • 1.1概念
    • 1.2特殊的二叉树
    • 二.二叉树的性质
    • 三.小练习
    • 3.1
    • 3.2
    • 3.3

一.二叉树的概念及结构

不熟悉树这个结构的可以看看数据结构:树这篇文章。

1.1概念

一棵二叉树是结点的一个有限集合,该集合:

  1. 为空
  2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

像这样:在这里插入图片描述
每个节点都有2个或1个或者0个子节点,这就是二叉树。而且

  1. 二叉树不存在度大于2的结点
  2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

任意二叉树都是由以下几种情况构成的:
在这里插入图片描述

1.2特殊的二叉树

  1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。像这样
    在这里插入图片描述

像这样除了最后一行,每一行的节点都有两个节点。

  1. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。像这样
    在这里插入图片描述

简单来讲完全二叉树就是最后一行的节点最少为1个最多为2 ^ (n-1)个节点(n为此时的高度)并且从左到右要连续.而节点为2 ^ (n-1)时此时的完全二叉树就是满二叉树。

二.二叉树的性质

我们观察一下完全二叉树:
在这里插入图片描述

  1. 来看这棵树的每一层都有多少个节点,通过计算不难算出,如果此时高度是i的话则一棵非空二叉树的第i层上最多有2 ^ (i-1)个结点
  2. 那深度为n的二叉树的最大结点数是多少呢?也就是深度为n的满二叉树的节点有多少。我们可以列一个式子:
    在这里插入图片描述

学过高中数学的应该能一眼看出来这是一个等比数列的前n项和结果就是:2^n - 1;但是这是完全二叉树也就是满二叉树最大的节点数,那最小的节点数是多少呢?这也不难算,最少节点个数就相当于最后一行只有1个节点,结果可以认为前(n-1)个节点的个数+1:
在这里插入图片描述

结果就是2 ^ (n-1) -1 + 1,也就是2 ^ (n-1).

  1. 再来计算一下如果这个数有i个节点,它的深度n是多少?既然刚才计算了总结点数 i = 2 ^ n - 1。那倒过来退n应该等于log(i + 1)这里是以2为底,但是我打出来那个2,所以就这样表示了。
    在这里插入图片描述

  2. 最后还有一个比较重要的性质:对任何一棵二叉树, 如果度为0其叶结点个数为n0, 度为2的分支结点个数为n2,则有n0= n2+1.就是没有孩子的节点永远比有两个孩子节点的个数多一个。

当然这个二级结论可以推到出来的:
在这里插入图片描述

刚开始这里只有一个节点,他没有孩子所以没有孩子的节点为1个n0 = 1,有两个孩子节点的没有n2 = 0.

在这里插入图片描述

现在多加一个节点没有孩子的节点是1这个节点仍然只有1个n0 = 1,而有两个孩子的节点还是没有n2 = 0;

在这里插入图片描述

再添加一个节点发现终于有一个节点有两个孩子了,n2 = 1,但是呢此时没有孩子的节点是1,2这两个节点变成了2个,n0 = 2.仍然比n2多一个,后来的步骤都差不多,所以说n0用于比n2多1.

三.小练习

看几道简单的练习:

3.1

在这里插入图片描述

这里就要用到刚才推导出来的结论:
n0 = n2 + 1;
而叶子节点数就是度为0的节点,所以这题答案是199+1

3.2

在这里插入图片描述

因为二叉树中节点的度只有三种0,1,2也就是说
n0 + n1 + n2 = 2n,而现在我们求的是n0的个数:
n0 + n1 + n2 = 2n;
n0 + n0 - 1 + n1 = 2n;
2*n0 = 2n + 1 - n1;

而现在我们唯一不知道的就是n1的值,但是注意只有一个度的节点只有两种情况:
要么为1:
在这里插入图片描述

要么为0:
在这里插入图片描述

我们再看刚才得出的式子:
2*n0 = 2n + 1 - n1此时n1不可能为0,一旦为0了,那n0的个数就变成了n + 1/2,这显然是不合理的,所以只有一个度的节点个数只能是0,叶子节点个数自然而然就等于n了。

3.3

在这里插入图片描述

节点个数和数的高度的关系,之前也算出来了:
最大节点个数 = 2 ^ 高度 - 1.
最小节点个数 = 2 ^ (高度).
通过估算2的9次方是512,碰巧531是在2的9次方和10次方之间。所以这个树的高度是10.

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

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

相关文章

Android动画之帧动画

在Android开发时,为了实现一些动态的炫酷的效果,我们常用到帧动画,View动画(补间动画)和属性动画,今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画? 帧动画就是顺序播放一组预先定…

什么是IO

java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流。 想要在Java程序中表示一个真实存在的文…

谈谈RabbitMQ的五种消息模型以及SpringAMQP的使用

目录一、前言1. RabbitMQ中的基本概念2. docker部署RabbitMQ3. AMQP与JMS的简单介绍4. 演示demo搭建结构二、Basic Queue三、Work Queue四、发布订阅模式1. Fanout2. Direct3. Topic五、消息转换器1. 默认转换器2. 配置JSON转换器一、前言 1. RabbitMQ中的基本概念 message 消…

逻辑回归损失函数原理笔记

损失函数: 之前一直想不明白这个式子为什么可以当损失函数。所以记录一下。 首先,假如一个属于1类的样本,经过预测,h(x)0.3,得出0.3的概率是属于1类,也就是0.7的概率是属于0类,那么其误差就是0.7。 相反&…

配置七牛云的自定义域名以及配置域名CNAME

背景:最近在使用七牛云的过程中发现一个问题,七牛云的测试域名是有时效限制的且到期后重新申请会改变,自己业务方生产和测试环境需要使用固定的域名来配置图片访问,这时就需要绑定到自己的域名了。 1、配置七牛云自定义域名 这个…

学Golang,看这一篇

去年学了一遍 Golang,发现都给整忘了, 好饭不怕晚,再次二刷。 其实学好 Golang 并不难,关键是要找到它和其它语言不同和众里寻他千百度相通的微妙之处,就能很优雅地使用 Golang,以下会涉及较多知识点。特殊…

(Java高级教程)第一章Java多线程基础-第一节6:多线程案例

文章目录一:单例模式(1)设计模式概述(2)单例模式概述(3)单例模式实现A:饿汉模式B:懒汉模式①:单线程版②:多线程版③:多线程版&#x…

alpha模型:打开量化投资的黑箱;附创业板布林带策略代码:年化15%。

原创文章第108篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 关于量化投资,我们写了不少文章。从数据准备,预处理,因子特征工程,因子分析,规则策略,模型&#xff0c…

平安城市解决方案-最新全套文件

平安城市解决方案-最新全套文件一、建设背景目前平安城市视频监控面临的主要问题:1、看不清2、传不回3、存不下4、找不着5、易泄露二、思路架构三、建设方案四、获取 - 平安城市全套最新解决方案合集一、建设背景 平安城市是一个特大型、综合性非常强的管理系统&am…

JSP文件上传

JSP 提供了上传和下载的功能,用户釆用此功能,可以轻松实现文件的传输。下面介绍文件上传与下载的操作。 用户通过一个 JSP 页面上传文件给服务器时,该 JSP 页面必须含有 File 类型的表单, 并且表单必须将 enctype 的属性值设置为…

Node.js 是怎么找到模块的?

大家好,我是前端西瓜哥,今天我们来看看 Node.js 模块查找的原理。 模块种类 模块有三种来源。 核心模块:Node.js 内置的包。比如 http、fs、path; 自定义模块:NPM 包。比如 axios、express,位于 node_mo…

virtualBox虚拟机之间网络互通设置

环境 主机:Win10 虚拟机:Ubuntu 20.04 虚拟机:VirtualBox 6.1 模式虚拟机→主机主机→虚拟机虚拟机↔虚拟机虚拟机→Net/LANNet/LAN→虚拟机NAT√端口转发√端口转发NATservice√端口转发√√端口转发Host-Only√√√Internal√Bridged√√…

【快速上手系列】用于登录的验证码制作(ValidateCode)和Javaweb自带的老式验证码快速上手

【快速上手系列】用于登录的验证码制作(ValidateCode)和Javaweb自带的老式验证码快速上手 验证码 简介 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动…

易基因|疾病研究:DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守

易基因|疾病研究:DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2022年07月27日,《J Exp Clin Cancer Res》杂志发表了题为“DNA me…

Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(三)

前言: 前文Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(二)_晚风_END的博客-CSDN博客 实现了告警系统模块的部署和测试,主要的告警范围是服务器节点的操作系统内存,磁盘空间的使用率这些方面&#xff0…

甘露糖-聚乙二醇-N-羟基琥珀酰亚胺mannose-PEG-NHS

甘露糖-聚乙二醇-N-羟基琥珀酰亚胺mannose-PEG-NHS 琥珀酰亚胺又称为丁酰亚胺或丁二酰亚胺,是一种无色针状结晶或具有淡褐色光泽的薄片固体,味甜。易溶于水、醇或氢氧化钠溶液,不溶于醚、氯仿等,可以提供PEG接枝修饰甘露糖&#…

精彩回顾!2022VisionChina深圳展圆满落幕

11月16日,维科杯•OFweek 2022中国工业自动化及数字化行业年度评选颁奖典礼在深圳大中华喜来登酒店举行,经过OFweek网络投票、专家组评审及组委会综合评审三轮激烈紧张的评选,昂视凭借“PiqsVT智能视觉系统”在近300个参评项目中脱颖而出&…

Linux三个踩坑过程记录

今早花了一早上的时间解决了三个Linux的问题,分别是读写权限、克隆虚拟机开启问题和Xshell连接VM虚拟机问题。平时用虚拟机比较少,现在刚一开始用,就给我来了三个问题让我解决,真是含泪解决问题,但现在解决了&#xff…

预定2.0 Crack ZoomCharts JavaScript 最值得探索

世界上最可探索的 JavaScript 图表 将内容深入分析和支持多点触控的大数据可视化轻松集成到您的 Web 项目中--ZoomCharts JavaScript 快速、简单且令人印象深刻的 JavaScript 图表 以极快的速度将 javascript 图表与令人惊叹的向下钻取功能集成,一定会给您的团队、…

Word控件Spire.Doc 【文本】教程(22) ;在 Word 中应用强调标记(C#/VB.NET)

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…