C语言数据结构(7)——树、二叉树前言

欢迎来到博主的专栏——C语言数据结构
博主ID:代码小豪

文章目录

    • 二叉树
    • 特殊二叉树
      • 满二叉树
      • 完全二叉树
    • 完全二叉树的存储结构

树是一个非线性的数据结构,由N个结点构成的集合。

树的各个结点由一个根结点联系起来,这个根节点没有前驱元素。
在这里插入图片描述

深度

所有能被根节点向下遍历K次访问到的节点同属于同一个深度。
比如:
在这里插入图片描述

父子节点
一个节点的下一层结点是子节点,上一层结点被称为父节点。同一层节点被称为兄弟节点。根节点不存在父节点。
在这里插入图片描述

一个节点拥有的子节点个数,称为该节点的度。
在这里插入图片描述

叶子结点,也称终端节点,指的是度为0的节点,比如节点6,7,5,3,这些节点被称为叶节点
树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为3
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推
树的高度或深度:树中节点的最大层次; 如上图:树的高度为4

子树

选取树中除根节点外的任意节点,该节点与其子孙节点构成这个树的子树。
在这里插入图片描述

如图中,由B为根节点,B,E,F,H构成一个子树,以G为根结点,G,I构成一个子树。

二叉树

每个节点最多拥有两颗子树,即二叉树的度不超过2.
如下图
在这里插入图片描述
二叉树的特点有:
(1)每个节点最多有两个子树,称为该节点的左子树和右子树。注意所述的是最多两个子树,因此一个子树,或者没有子树都成立。
(2)左子树和右子树是有顺序的,比如F是C的右子树,因为F的是由C的右指针指向的,因此F是右子树。

特殊二叉树

满二叉树

二叉树的所有非叶子节点的度都为2,且最后一层为满的二叉树称为满二叉树
在这里插入图片描述

(1)假设满二叉树的深度为N,二叉树的节点数为2^N-1
(2)慢二叉树的第K层的的节点个数为:2^(K-1)

完全二叉树

定义:深度为K的二叉树,将其N个节点按照从上到下,从左到右的顺序进行标号,如果这些节点的标号与满二叉树一一对应,那么这个树称为完全二叉树

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

完全二叉树的特点:
(1 )叶子节点只存在最下两层
(2)最下层的叶子节点一定在左边连续
(3)不存在只有右子树的节点
(4)相同节点数的二叉树,完全二叉树的深度是最小的

完全二叉树的存储结构

通常情况下,二叉树都会采用链式存储结构,构造一个右指针指向右子树,一个左指针指向左子树。这是因为顺序结构不能展示出二叉树之间的节点关系,以下图二叉树为例。
在这里插入图片描述
其顺序存储结构为
在这里插入图片描述
节点12是节点6的子节点,但是顺序结构并不能很好表示这个关系,当然我们可以在结构体中加入父子节点的下标。但是总体而言并不方便
在这里插入图片描述

但是满二叉树和完全二叉树适合用顺序结构,这是因为满二叉树和完全二叉树的父子节点具有某种规律

在这里插入图片描述

观察上图:完全二叉树的顺序结构拥有两个特点
(1)左子节点的下标等于父节点的下标乘2+1
(2)右子节点的下标等于父节点的下标乘2+2
(3)父节点等于子节点的下标-1除2.

以节点5为例,节点5的下标为4,其左子节点10的下标为9,42+1=9。
右子节点11的下标为10,4
2+2=10
其父节点2的下标为1,(4-1)/2=1

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

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

相关文章

【leetcode热题】 分数到小数

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入,保证 …

Qt教程 — 3.4 深入了解Qt 控件:Input Widgets部件(3)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 Dial 组件-模拟车速表 2.2 QScrollBar组件-创建水平和垂直滚动条 2.3 QSlider组件-创建水平和垂直滑动条 2.4 QKeySequenceEdit组件-捕获键盘快捷键 Input Widgets部件部件较多,将分为三篇文章介绍…

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器)

DDR协议基础进阶(三)——(基本功能、初始化、MR寄存器) 一、DDR基本功能 DDR基本功能主要包括: 8-bit prefetch预取——8-bit,是指8位数据,即8倍芯片位宽的数据。由于DDR内部数据传输是32bit…

python3GUI--qt仿暴风影音视频播放器By:PyQt5(附下载地址)

文章目录 一.前言二.环境1.开发环境2.打包环境3.运行环境 三.软件截图1.启动页2.视频播放3.音频播放4.其他1.托盘2.对话框 四.功能总览五.代码展示&心得1.UI设计2.如何防止卡顿3.如何自定义组件 五.思考…

VLC抓取m3u8视频

前言 最近想看一些网络视频,但是很多时候网页上是m3u8推流的,如果在线看,速度又慢,所以就想下载下来,就想到了VLC的推流,转换能力,查阅资料,加上实践,总结心得。 设置中…

RabbitMQ进阶

1.消息可靠性 消息从发送,到消费者接收,会经历多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: - 发送时丢失: - 生产者发送的消息未送达exchange - 消息到达exchange后未到达queue - MQ宕机,queue将消息丢失 - consumer接收到消息后未消费就宕机 …

【C语言】浮点型在内存中的存储

文章目录 例题引入剖析原因浮点型的二进制转换(M)正负号之分(S)科学记数法(E)关于 S E M 在内存中的存储存取浮点型时的情况讨论 例题解析整形存储为浮点型并输出浮点型存储为整形并输出 在我的上一篇博客中…

接雨水-热题 100?-Lua 中文代码解题第4题

接雨水-热题 100?-Lua 中文代码解题第4题 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释…

算法——前缀和之除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和

这几道题对于我们前面讲过的一维、二维前缀和进行了运用,包含了面对特殊情况的反操作 目录 4.除自身以外数组的乘积 4.1解析 4.2题解 5.和为K的子数组 5.1解析 5.2题解 6.和可被K整除的子数组 6.1解析 6.2题解 7.连续数组 7.1题解 7.2题解 8.矩阵区域和 8.1解析 …

GET和POST方法的区别

GET和POST的区别 在我们开发项目的时候常常会在Controller层使用到POST方法或者GET方法,犹豫到底将接口定义为GET方法还是POST方法?那这两者之间有什么区别呢? 看一下官方定义: GET 和 POST 是 HTTP 协议中最常用的两种请求方法…

爬虫学习 Scrapy中间件代理UA随机selenium使用

目录 中间件UA、代理处理---process_requestUA随机 代理处理seleniumscrapy 中间件 控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 ROBOTSTXT_OBEY FalseLOG_LEVEL "WARNING"运行 scrapy crawl baidu middle…

ArcGIS分享图层数据的最佳方法

在工作中,经常需要将图层数据分享给其他人。 如下图所示,需要分享的是【CJDCQ】和【GHDLTB】,图层带有符号系统: 一、分享gdb数据库及lyr文件 分享数据自然要找到源数据: 但是,gdb数据是不带符号系统的&a…

微信小程序开发系列(三十四)·自定义组件的创建、注册以及使用(数据和方法事件的使用)

目录 1. 分类和简介 2. 公共组件 2.1 创建 2.2 注册 2.3 使用 3. 页面组件 3.1 创建 3.2 注册 3.3 使用 4. 组件的数据和方法的使用 4.1 组件数据的修改 4.2 方法事件的使用 1. 分类和简介 小程序目前已经支持组件化开发,可以将页面中的功能…

springboot基于spring boot的在线答题微信小程序

摘 要 在线答题微信小程序是考试中重要的一环,在线答题是学生获取任务信息的主要渠道。为了方便学生能够在网站上查看任务信息、考试,于是开发了基于 springboot框架设计与实现了一款简洁、轻便的在线答题微信小程序。本微信小程序解决了在线答题事务中的…

2.3 HTML5新增的常用标签

2.3.1 HTML5新增文档结构标签 在HTML5版本之前通常直接使用<div>标签进行网页整体布局&#xff0c;常见布局包括页眉、页脚、导航菜单和正文部分。为了区分文档结构中不同的<div>内容&#xff0c;一般会为其配上不同的id名称。例如&#xff1a; <div id"h…

FFmpeg转码参数说明及视频转码示例

-b : 设置音频或者视频的转码码率 -b:v 只设置视频码率 -b:a 只设置音频码率 -ab: 只设置音频码率, 默认码率大小为: 128k bit/s -g: 设置视频GOP大小,表示I帧之间的间隔,默认为12 -ar: 设置音频采样率,默认0 -ac: 设置音频通道数量 默认0 -bf: 设置连…

CTFHUB-web-信息泄漏

题目所在位置&#xff1a;技能树->web->信息泄漏 目录遍历 打开题目&#xff0c;我们进入的是这个页面 翻译过来就是 得到的信息就是&#xff1a;flag要在这些目录里面寻找&#xff0c;我们直接一个一个点开查看就行 发现得到一个flag.txt&#xff0c;点击打开得到flag …

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))

UIExtensionComponent用于支持在本页面内嵌入其他应用提供的UI。展示的内容在另外一个进程中运行&#xff0c;本应用并不参与其中的布局和渲染。 通常用于有进程隔离诉求的模块化开发场景。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0…

【Java】List, Set, Queue, Map 区别?

目录 List, Set, Queue, Map 区别&#xff1f; Collection和Collections List ArrayList 和 Array区别&#xff1f; ArrayList与LinkedList区别? ArrayList 能添加null吗&#xff1f; ArrayList 插入和删除时间复杂度&#xff1f; LinkedList 插入和删除时间复杂度&…

计算机网络-数据链路层

一、认识以太网 "以太网" 不是⼀种具体的网络&#xff0c;而是一种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容。 例如&#xff1a;规定了网络拓扑结构&#xff0c;访问控制方式&#xff0c;传输速率等; 例如&#xff1a;以太网中的网线必须使用…