数据结构 第六章 树与二叉树(二)

在这里插入图片描述

🚀 【考纲要求】二叉树的定义及其主要特征;二叉树的顺序存储和链式存储

二、二叉树的概念

1)什么是二叉树?

对于二叉树来说,它是一个特殊的树形结构,其每个节点都最多有两个孩子(即节点的度最大为2),同时二叉树是一个有序树,不可以随意颠倒位置。

2)二叉树的特此:

根据二叉树的定义就能得到二叉树的特性:

  • 是一个有序树。
  • 每一个节点的最大度为2。
  • 二叉树可以为空,即没有节点的二叉树称为空二叉树

3)二叉树和度为2的有序树的区别:

度为2的与有序树表示的是该树至少有一个度为2的最大节点,也就表明其实对于度为2的有序树来说至少都有3个节点,从而来满足度为2;而对于二叉树来说,其并不需要满足其度为2,二叉树的度可以为2也可以为1,甚至为0,即变为空二叉树。即二叉树的五种形态如下:空二叉树——如图a;只有一个根节点的二叉树——如图b;只有左子树——如图c;只有右子树——如图d;左右子树都有——如图e。

在这里插入图片描述

2.1几种特殊的二叉树及其定义和主要特性

①:满二叉树

就是除去二叉树最后一层的所有节点都有两个孩子,即节点的度都为2。按着定义说就是对于高度为h的二叉树,若其节点数为 2 h − 1 2^h-1 2h1个节点的二叉树称为满二叉树。

就如下图所示,其就为满二叉树;其特性如下:

  • 叶子节点只出现在最后一层
  • 不存在度为1的节点
  • 按层序从1开始编号,节点i的左孩子的序号是2i,右孩子是2i+1节点i的父节点是向下取整的 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2
    在这里插入图片描述

②:完全二叉树

高度为h的二叉树,有n个节点的二叉树,当且仅当每个节点都和高度为h的满二叉树一一对应,就称为完全二叉树。

如下图所示就是一个完全二叉树,它的每一个节点都和高度为h的满二叉树一一对应;其基本特性如下:

  • 叶子节点可能出现在树的最后一层和倒数第二层。
  • 只可能有一个度为1的节点。
  • 按层序编号,序号为i的节点,若其 i ≤ ⌊ n / 2 ⌋ i\leq\lfloor n/2 \rfloor in/2,n为节点的个数,则表示该节点是分支节点,否则为叶子节点。
  • 若n为偶数,则有度为1的节点,若n为奇数,则没有度为1的节点,则其节点都有左孩子节点和右孩子节点。

在这里插入图片描述
③:平衡二叉树

任意一个节点的左子树和右子树的高度差只能最多相差一。为了得到更高的搜索效率。

④:二叉排序树

左子树上的任意一个节点都小于根节点的数值,右子树上的任意一个节点都大于根节点的数值。(用于排序和搜索

2.2二叉树的性质

  • 非空二叉树的叶子节点的个数 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1,因为对于二叉树来说其总节点个数应该为 n = n 0 + n 1 + n 2 n=n_0+n_1+n_2 n=n0+n1+n2 ①式,同时其总节点个数还可以表述为 n = n 1 + 2 n 2 + 1 n=n_1+2n_2+1 n=n1+2n2+1 ②式。所以不难得到叶子节点的个数 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  • 非空二叉树的第k层最多有 2 k − 1 2^{k-1} 2k1个节点
  • 高度为h的二叉树最多有 2 h − 1 2^h-1 2h1个节点(等比数列的求和)
  • 具有n个节点的完全二叉树的高度为 ⌈ l o g 2 ( n + 1 ) ⌉ \lceil log_2(n+1) \rceil log2(n+1)⌉因为假设高度为h,其完全二叉树最多的节点个数为 2 h − 1 2^h-1 2h1,最少为 2 h − 1 − 1 2^{h-1}-1 2h11但取不到这个最少的;所以可以得到n的取值范围为 2 h − 1 − 1 < n ≤ 2 h − 1 2^{h-1}-1< n \leq2^h-1 2h11<n2h1所以 h − 1 < l o g 2 ( n + 1 ) ≤ h h-1< log_2(n+1) \leq h h1<log2(n+1)h

2.3二叉树的存储结构

①顺序存储
对于顺序存储的二叉树是使用求组来实现的,按着树的节点从上到下从左到右依次来存储,其每个节点的关键字对应数组的下标存储;

#include<stdio.htypedef int Elementtype;
define maxisize 100struct TreNode {Elementtype data;bool isempty;
};TreNode t[maxsize];     //声明了一个树,节点个数为maxsize

不难发现对于完全二叉树来说其存储是很好进行的,要实现该数据结构的基本操作也是比较简单的

  • 查询当前i节点的父节点,将 i / 2 i/2 i/2然后向下取整数就可以查询到父节点。
  • 查询当前i节点的左孩子节点,直接用 2 ∗ i 2*i 2i查询,同时要判断该节点是否有左孩子节点。
  • 查询当前i节点的右孩子节点,直接用 2 ∗ i + 1 2*i+1 2i+1查询,同时要判断该节点是否有右孩子节点。
  • 查询当前节点是分支节点还是叶子结点,使用i和 n / 2 n/2 n/2向下取整的结果比较,若i小于等于该值则表示为分支节点,若大于该值则表示为叶子结点。
  • 查询现在节点所在的层次直接使用公式 ⌈ l o g 2 ( i + 1 ) ⌉ \lceil log_2(i+1) \rceil log2(i+1)⌉

但是一旦这个二叉树是一个非完全二叉树的话,若还是按着像完全二叉树一样的方式存储的话会导致很难实现该数据结构的基本操作,所以在存储非完全二叉树的时候依然要保持节点存储在其对应的完全二叉树对应的节点处,这样才能方便查询当前节点的左字树节点和右字树节点。
在这里插入图片描述

②链式存储

使用指针链表的方式来实现,其一个节点的结构如下,右左指针指向左孩子节点,由右指针指向右孩子节点。
在这里插入图片描述
代码定义

#include<stdio.h>typedef int Elementtype;typedef struct TreNode {Elementtype data;struct TreNode *lchild *rchild;
}TreNode,*BiTree;//声明一个空树
BiTree tree = NULL;
//声明根节点
tree = (TreNode*)malloc(sizeof(TreNode));

实现该结构的具体操作

  • 查找当前i节点的左孩子节点,直接通过左指针找到,同时仍然要判断左孩子是否存在。
  • 查询当前i节点的右孩子节点,直接通过右指针找到,判断右孩子是否存在。
  • 查询当前节点的父节点,我们只能是遍历整个树找到其父节点,所以当要经常找该节点的父节点的话,可以再增加一个指向父节点的指针。
    在这里插入图片描述

对于链式存储二叉树来说,若节点个数为 n n n的话,那么其指针域总数就是 2 n 2n 2n个,空指针域为 2 n − ( n − 1 ) 2n-(n-1) 2n(n1)

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

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

相关文章

Redis入门到通关之Redis数据结构-Hash篇

文章目录 ☃️ 概述☃️底层实现☃️源码☃️其他 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后…

ESP-IDF下载与安装完整流程

本文主要看参考官网说明&#xff0c;如下&#xff1a; Windows 平台工具链的标准设置 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 一、概述 ESP-IDF需要安装一些必备工具&#xff0c;才能围绕ESP32构建固件&#xff0c;包括&#xff1a; PythonGit交叉编译…

圈子交友系统话题设置-免费圈子社区论坛交友系统-圈子交友系统功能介绍-APP小程序H5多端源码交付!

1. 圈子的独特创造与精心管理 源码赋予用户创造独特圈子的能力&#xff0c;为志同道合的人们打造一个分享兴趣、交流见解的平台。每个圈子都可以个性化定制主题、标签和规则&#xff0c;以确保圈子具备个性特点和强烈的社群感。作为圈子的创建者&#xff0c;您将享有自由编辑资…

LabVIEW专栏八、类

该章目的是可以开发仪器类。 一、类的概述 一般来说类有三大特性&#xff0c;封装&#xff0c;继承和多态。 在实际项目中&#xff0c;最主要是继承和多态&#xff0c;要搞清楚这两者的概念和在LabVIEW中是怎样应用的。在LabVIEW中&#xff0c;面向对象编程用到的就是LabVIE…

基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2013B 3.部分核心程序 .............................................................................. %我们这里…

利用大模型与AI Agent,实现企业数据智能分析

导语&#xff1a;大模型爆火之后&#xff0c;很多企业也用大模型做了相关探索和实践&#xff0c;我们发现大模型解决单点问题时效果更好。但同时会产生安全、幻想等相关问题。今天从传统数据分析的痛点&#xff0c;到大模型智能分析的建设方式&#xff0c;并结合相关实践案例&a…

OpenHarmony实战开发-合理运行后台任务

简介 设备返回主界面、锁屏、应用切换等操作会使应用退至后台。为了降低设备耗电速度、保障用户使用流畅度&#xff0c;系统会对退至后台的应用进行管控&#xff0c;包括进程挂起和进程终止。为了保障后台音乐播放、日历提醒等功能的正常使用&#xff0c;系统提供了受规范约束…

安全AI未来 | C3安全大会 · 2024,数据驱动 AI原生

数字为时代变革注入动力&#xff0c;AI为重塑社会文明带来原力。数智浪潮中&#xff0c;我们见证着时代跃迁的巨变&#xff0c;面临着适变、应变、驭变的挑战。 数字驱动、AI原生。数字的流动不仅承载着信息&#xff0c;更将激活未来的无限价值&#xff1b;AI&#xff0c;不…

unity cinemachine相机 (案例 跟随角色移动)

安装相机包 打开包管理工具 在 unity registry 搜索cinemachine 会在maincamera中生成一个组件cinemachineBrain 只能通过虚拟相机操控 主相机 虚拟相机的参数 案例 1.固定相机效果 位置 在固定的地方 默认的模式 2.相机跟随人物效果 焦距设置 20 跟随设置 把playere…

【Android】 四大组件详解之广播接收器、内容提供器

目录 前言广播机制简介系统广播动态注册实现监听网络变化静态注册实现开机自启动 自定义广播发送标准广播发送有序广播 本地广播 内容提供器简介运行时权限访问其他程序中的数据ContentResolver的基本用法读取系统联系人 创建自己的内容提供器创建内容提供器的步骤 跨程序数据共…

STM32的GPIO输入和输出函数详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. GPIO模式 2. GPIO输出 2.1 RCC 2.2 GPIO 3. 代码示例 3.1 RCC时钟 3.2 GPIO初始化 3.3 GPIO输出函数 3.4 推挽输出和开漏输出 4. GPIO输入 4.1 输入模式 4.2 数据读取函数 5. C语言语法 1…

【书生浦语第二期实战营学习笔记作业(四)】

课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 书生浦语第二期实战营学习笔记&作业(四) 1.1、微调理论讲解及 XTuner 介绍 两种Fin…

8.4.3 使用3:配置单臂路由实现VLAN间路由

1、实验目的 通过本实验可以掌握&#xff1a; 路由器以太网接口上的子接口配置和调试方法。单臂路由实现 VLAN间路由的配置和调试方法。 2、实验拓扑 实验拓扑如下图所示。 3、实验步骤 &#xff08;1&#xff09;配置交换机S1 S1(config)#vlan 2 S1(config-vlan)#exit S…

Vue基于高德地图API封装一个地图组件

一、参考资料 高德开放平台 | 高德地图API (amap.com) 二、安装及配置 pnpm i vuemap/vue-amap --save man.ts 密钥及安全密钥需要自己到高德地图开放平台控制台获取. import { createApp } from vue import App from ./App.vue import router from ./router i…

蓝桥杯管道

一开始拿到这道题没有什么头绪。综合各路大佬题解&#xff0c;一下子豁然开朗。 题眼&#xff1a;每一段感受器都感受到水的最早时间。由于整个管道&#xff0c;分为多个段&#xff0c;每个段都有一个感受器。所以题眼翻译为&#xff1a;覆盖满整条管道&#xff0c;所需要的最短…

系统设计 --- E2E Test System

系统设计 --- E2E Test System 什么是E2EE2E Architecture Example 什么是E2E E2E&#xff08;端到端&#xff09;测试是一种软件测试方法&#xff0c;旨在模拟真实的用户场景&#xff0c;测试整个应用程序或系统的端到端功能和交互流程。E2E 测试涵盖了从用户界面到后端系统的…

用于车载T-BOX汽车级的RA8900CE

用于车载T-BOX等高精度计时的汽车级时钟模块RTC:RA8900CE.车载实时时钟芯片RA8900CE内置32.768Khz的晶体&#xff0c;实现年、月、日、星期、小时、分钟和秒精准计时。RA8900CE满足AEC-Q200认证&#xff0c;内置温补功能&#xff0c;保证实时时钟的稳定可靠&#xff0c;功耗低至…

计算机网络3——数据链路层3以太网的MAC层

文章目录 一、MAC 层的硬件地址1、介绍2、注意点3、定制标准 二、MAC 帧的格式1、结构2、工作原理3、其他 一、MAC 层的硬件地址 1、介绍 在局域网中&#xff0c;硬件地址又称为物理地址或 MAC地址(因为这种地址用在MAC帧中)。 大家知道&#xff0c;在所有计算机系统的设计中…

[C++][算法基础]能被整除的数(容斥原理)

给定一个整数 &#x1d45b; 和 &#x1d45a; 个不同的质数 &#x1d45d;1,&#x1d45d;2,…,&#x1d45d;&#x1d45a;。 请你求出 1∼&#x1d45b; 中能被 &#x1d45d;1,&#x1d45d;2,…,&#x1d45d;&#x1d45a; 中的至少一个数整除的整数有多少个。 输入格式…

Linux报错处理:‘abrt-cli status’ timed out

最近登录服务器时出现报错&#xff0c;后来查阅资料发现是因为ssh登录时间很久&#xff0c;登录后出现abrt-cli status timed out 的报错。 1.问题分析 abrt-cli是ABRT(Automated Bug Reporting Tool)的命令行接口&#xff0c;用于在Linux系统中处理和报告程序崩溃。 如果abr…