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

news2025/1/11 16:43:01

欢迎来到博主的专栏——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.coloradmin.cn/o/1521297.html

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

相关文章

小球垂直跳动,C语言模拟重力加速度

位移公式 1、速度和时间关系: 2、位移和时间关系: 3、力和加速度关系: 4、空气阻力: 受理分析 以向下运动为正方向 1、向下运动整体受力,重力加空气阻力: 2、向上运动整理受力,重力减空气阻力&…

Apache zookeeper kafka 开启SASL安全认证

背景:我之前安装的kafka没有开启安全鉴权,在没有任何凭证的情况下都可以访问kafka。搜了一圈资料,发现有关于sasl、acl相关的,准备试试。 简介 Kafka是一个高吞吐量、分布式的发布-订阅消息系统。Kafka核心模块使用Scala语言开发…

MySQL基础架构

文章目录 MySQL基础架构一、连接器 - 建立连接,权限认证二、查缓存 - 提高效率三、分析器 - 做什么四、优化器 - 怎么做五、执行器 - 执行语句六、存储引擎1、存储引擎的概述2、存储引擎的对比3、存储引擎的命令4、存储引擎的选择 MySQL基础架构 大体来说&#xff…

力扣-20. 有效的括号(回顾知识哈希表,栈)

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有…

HTML万字学习总结

html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介<html></html>根目录<head></head>规定文档相关的配置信息&#xff08;元数据<body></body>元素表示文档的内容<meta></meta>表示…

“技多不压身”是什么意思?看完这篇文章你会明白:有了手艺,走遍天下都不怕!

“技多不压身”是什么意思&#xff1f;看完这篇文章你会明白&#xff1a;有了手艺&#xff0c;走遍天下都不怕&#xff01; 咱们的老祖宗流传一句话&#xff1a;“一招鲜&#xff0c;吃遍天。”这话说得直白&#xff0c;却道出了学一门手艺或技术对于人生的重要性。“李秘书讲…

Linux 学习笔记(16)

十六、 计划任务 在很多时候为了自动化管理系统&#xff0c;我们都会用到计划任务&#xff0c;比如关机&#xff0c;管理&#xff0c;备份之类的操作&#xff0c;我 们都可以使用计划任务来完成&#xff0c;这样可以是管理员的工作量大大降低&#xff0c;而且可靠度更好。 l…

电商经济和实体经济,哪个更有发展力?这篇文章讲的很详细!

我是电商珠珠 三年的冲击&#xff0c;使实体经济走向衰败&#xff0c;以至于到今天很多实体店仍无法正常营业&#xff0c;面临赔本的惨状。花大好几十万去做这件事&#xff0c;结果分币未挣。近年来&#xff0c;电商虽然发展的很快&#xff0c;但是平台众多&#xff0c;规则也…

“入站营销“VS“即时流量变现“客户该进谁家门?

在不断变化的市场环境下&#xff0c;两种主导战略“入站营销 ”和 “即时流量变现”决定了企业接触受众的方式。了解这些方法之间的根本区别对于企业制定有效的营销战略至关重要。 受众体的差别线索质量 “即时流量变现”&#xff0c;顾名思义&#xff0c;短时间&#xff0c;…

Leetcode - 周赛388

目录 一&#xff0c;3074. 重新分装苹果 二&#xff0c;3075. 幸福值最大化的选择方案 三&#xff0c;3076. 数组中的最短非公共子字符串 四&#xff0c;3077. K 个不相交子数组的最大能量值 一&#xff0c;3074. 重新分装苹果 本题是一道阅读理解题&#xff0c;就是将数组a…

springboot“力炫”健身馆网站

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而信息管理系统是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促…

7.1strcmp

strcmp 函数原型 extern int strcmp(const char *s1,const char *s2);规则 当s1<s2时&#xff0c;返回为负数&#xff1b; 当s1s2时&#xff0c;返回值0&#xff1b; 当s1>s2时&#xff0c;返回正数。 即&#xff1a;两个字符串自左向右逐个字符相比&#xff08;按ASCI…

springboot项目自定义切面增强方法功能(springboot记录日志)

说明 背景&#xff1a;记录系统接口日志入库&#xff0c;包含接口方法、入参、回参、响应时间、操作人、操作时间等信息。 方案&#xff1a;添加自定义切面处理 一、自定义切面注解 package com.gstanzer.supervise.annotation;import com.gstanzer.supervise.enums.Busine…

【BFS】走迷宫问题——acwing844

问题描述 给定一个 nm 的二维整数数组&#xff0c;用来表示一个迷宫&#xff0c;数组中只包含 0 或 1&#xff0c;其中 0表示可以走的路&#xff0c;1 表示不可通过的墙壁。 最初&#xff0c;有一个人位于左上角 (1,1) 处&#xff0c;已知该人每次可以向上、下、左、右任意一…

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下&#xff0c;测试tcp保活&#xff0c;可以使用tcp自带keepalive功能。 2、几个重要参数&#xff1a; tcp_keepalive_time&#xff1a;对端在指定时间内没有数据传输&#xff0c;则向对端发送一个keepalive packet&#xff0c;单位&#xff1a;秒 tcp_keep…

学习开发小程序的起航日记

2024年3月16日 不知不觉中三月份还只剩了一半的光景&#xff0c;我想写的内容还很多没有写&#xff0c;或者更应该说&#xff0c;是想积累的还有很多。现在最应该去完善Java的内容&#xff0c;可还是想先等等。想等搞清楚小程序部分&#xff0c;想等积累完小程序的内容。 这几…

unraid docker.img扩容

unraid 弹Docker image disk utilization of 99%&#xff0c;容器下载/更新失败 我的版本是6.11.5&#xff0c;docker.img满了导致容器不能更新&#xff0c;遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来&#xff0c;我已经清理过只清理出来1G多点&…

黑马微服务p30踩坑

报错详情 : orderservice开不起来 : 发生报错 : 然后检查了以下端口啥的 &#xff0c;配置啥的都是没有问题的 ; 解决办法 : 1 . 修改nacos1,2,3中的端口&#xff0c;将conf 中 cluster.conf中 的 127.0.0.1 全部改成自己本机的真实ipv4地址; 本机真实ipv4地址查看 :…

Java学习笔记(14)

常用API Java已经写好的各种功能的java类 Math Final修饰&#xff0c;不能被继承 因为是静态static的&#xff0c;所以使用方法不用创建对象&#xff0c;使用里面的方法直接 math.方法名 就行 常用方法 Abs,ceil,floor,round,max,minm,pow,sqrt,cbrt,random Abs要注意参数的…

数据结构:树和二叉树

树的概念 1.树是一种非线性的数据结构。它是由n个有限节点的集合。 2.树分为根节点和子树。根节点没有前驱节点。 3.树的子树是由一个个子树组成&#xff0c;它们可以看作一个个集合。每个集合下面又有集合。 因此&#xff0c;树是递归定义的。 树形结构中&#xff0c;子树…