数据结构-二叉树-基础知识

news2024/9/21 17:57:32

数据结构-二叉树-基础知识

  • 1.
    • 1.1什么是树
    • 1.2基本概念
      • 子节点、父节点
      • 叶节点
      • 节点的度
      • 树的高度/深度
      • 节点的子孙、祖先
    • 1.3树与非树
    • 1.4如何实现
    • 1.5实例
  • 2.二叉树
    • 2.1什么是二叉树
    • 2.2特殊的二叉树
      • 满二叉树
      • 完全二叉树
    • 2.3性质
      • 层数
      • 节点
    • 2.4存储结构

1.

1.1什么是树

树型结构是一类重要的非线性数据结构。树是以分支关系定义的层次结构。
把它叫做“树”是因为它常看起来像一棵倒挂的树,也就是说它常是根朝上,而叶朝下的。

在这里插入图片描述

1.2基本概念

子节点、父节点

子节点也叫孩子节点。

子节点:在树形图中,当前节点的各个子树的根称为当前节点的子节点。即当前节点所直接支配的节点。

可理解为:指该节点下一层与其直接相连的节点。
在这里插入图片描述
A的子节点为BCD
E的子节点为JK

对于各个子节点,它们上面的那个就叫父节点,也叫双亲节点。
BCD的父节点为A
JK的父节点为E

叶节点

叶节点也叫终端节点、叶子。特点是度为0
在这里插入图片描述
对于上图,CFGHIJK就是叶节点。

节点的度

节点的度:节点拥有子节点的数量。

可理解为:该节点的下一层与其直接相连的节点数。

在这里插入图片描述
A的度为3
D的度为4

树的高度/深度

指树的最大层次。
在这里插入图片描述
上图,树的高度为4

节点的子孙、祖先

子孙:指该节点下面所有与其直接或间接相连的节点。
祖先:指从该节点到根所经过的所有节点。
在这里插入图片描述
B的子孙为EJK
J的祖先为EBA
A为所有节点的祖先。

1.3树与非树

对于一个树,有几个重要的特点:

  • 子树不能相交。
  • 除了根节点,每个节点有且仅有一个父节点。
  • N个节点,就有N+1条边。
    反例:
    在这里插入图片描述
    在这里插入图片描述

1.4如何实现

左孩子右兄弟表示法。
即,在每个节点中,存储其最左边的子节点的地址、其右边那个兄弟节点的地址。

大概是这样:
在这里插入图片描述

typedef int DataType;
struct TreeNode
{
	struct TreeNode* pFistChild;
	struct TreeNode* pNextBorther;
	DataType data;
};

1.5实例

如文件夹:
在这里插入图片描述

2.二叉树

2.1什么是二叉树

二叉树每个节点的度最大为二,即,每个节点最多分出两个子树,且有左右之分
每一个二叉树都由下面几种情况组合而成:
在这里插入图片描述

2.2特殊的二叉树

满二叉树

每层都是满的,就是满二叉树,如下面这几个:
在这里插入图片描述

完全二叉树

现假设有个满二叉树,有h层,那么,在第h层的最后去掉几个节点就得到完全二叉树:
在这里插入图片描述
需注意:满二叉树是特殊的完全二叉树。

2.3性质

层数

根节点层数为1

层数1234h
每层最多节点数12482^(h-1)
最多节点总数13715(2^h)-1
  • n个节点的满二叉树:层数h=log(n+1)

  • 对任意的二叉树,当度为2的节点有n1个,度为0的节点有n2个,有n2=n1+1

节点

n个节点的完全二叉树,由根节点开始从0编号。
在这里插入图片描述
那么,对于一个序号为k的节点,有:

  • k == 0,为根;k != 0,双亲节点的序号为(k-1)/2
    如对DE(4-1)/2 == (3-1)/2 == 1
  • 2*k + 1 < n,左孩子序号为2k+1
  • 2*k + 2 < n,右孩子序号为2k+2

2.4存储结构

可用两种结构存储,一种顺序结构,一种链式结构。
顺序结构:用数组存储,一般只适合完全二叉树,否则会造成空间浪费。
链式结构:用链表存储,用指针链接节点。


希望本篇文章对你有所帮助!并激发你进一步探索数据结构的兴趣!

本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!

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

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

相关文章

C#笔记10 Thread类怎么终止(Abort)和阻止(Join)线程

Thread类 C#笔记8 线程是什么&#xff1f;多线程怎么实现和操作&#xff1f;-CSDN博客 C#笔记9 对线程Thread的万字解读 小小多线程直接拿下&#xff01;-CSDN博客 上次说过怎么简单的使用多线程&#xff0c;怎么创建多线程&#xff0c;但是没有具体分析它的终止和释放。 线…

【C++题解】1330. 求最大梯形的面积

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1330. 求最大梯形的面积 类型&#xff1a;二维数组 题目描述&#xff1a; 从键盘读入 n ( 3≤n≤100 )个梯形的上底、下底和高&#xff0c;请问这 n 个梯形中&#xff0c;最大面积…

3.ChatGPT在教育领域的应用:教学辅助与案例分享(3/10)

ChatGPT在教育领域的应用&#xff1a;教学辅助与案例分享 引言 在21世纪的教育领域&#xff0c;技术革新正以前所未有的速度改变着传统的教学和学习方式。随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;教育技术&#xff08;EdTech&#xff09;领域迎来了新的…

“后期分块”:用长上下文嵌入模型拯救文本检索

论文&#xff1a;Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models地址&#xff1a;https://arxiv.org/abs/2409.04701 研究背景 研究问题&#xff1a;这篇文章要解决的问题是文本块嵌入在处理长文本时丢失上下文信息的问题。具体来说&#xf…

信刻光盘安全隔离与信息交换系统

随着各种数据传输、储存技术、信息技术的快速发展&#xff0c;保护信息安全是重中之重。军工、政府、部队及企事业单位等利用A网与B网开展相关工作已成为不可逆转的趋势。针对于业务需要与保密规范相关要求&#xff0c;涉及重要秘密信息&#xff0c;需做到安全的物理隔离&#…

队列的详细操作

1.循环队列--队列的顺序表示和实现 #include<stdio.h> #define MAXQSIZE 100 typedef struct {int* base;int front;int rear; }SqQueue;int InitQueue(SqQueue& Q) {Q.base new int[MAXQSIZE];//为队列分配一个最大容量为MAXSIZE的数组空间if (!Q.base)return -1;…

QXml 使用方法

VS2019 QT 编译工具链问题解决 使用winqtdeploy.exe 打包环境就可以正常运行&#xff0c;缺少某一个运行库引起的 简易使用python脚本编译运行 Python3 中的 slots 和 QT 中的 slots 宏定义重复, 放在不同的文件中进行调用可以避免 还是比较习惯从源码包引入&#xff08;方便定…

OpenAI新“草莓”模型即将发布,推理模式引发关注

OpenAI发布“草莓”模型的消息引发广泛关注。这个新模型将在未来两周内亮相&#xff0c;将为ChatGPT等产品带来全新的技术支持。草莓模型的推理模式具有独特性&#xff0c;能够仿效人类思维&#xff0c;在生成响应之前进行拟人化思考。其推理过程通常需要10到20秒&#xff0c;这…

2_foc闭环调试_ADC电流采样与滤波及pid数据结构

1、ADC电流采样 上次添加了编码器获取电角度的程序&#xff0c;将之前开环控制的角度进行了替换&#xff0c;这次再将电流采样添加进来&#xff0c;之后就可以利用这样一个有反馈的系统进行电流环PI控制器参数调试。 之前写过ADC&#xff0b;DMA电流采样的stm32库函数程序&…

《 C++ 修炼全景指南:八 》智能指针大揭秘:从 auto_ptr 到 unique_ptr shared_ptr 的进化之路

1、引言 在 C 编程中&#xff0c;内存管理历来是复杂且容易出错的部分。手动管理动态分配的内存不仅会导致内存泄漏&#xff0c;还会引发悬空指针和双重释放等问题。如何有效地管理动态内存&#xff0c;避免内存泄漏和未定义行为&#xff0c;往往是困扰初学者和资深开发者的难…

常见 HTTP 状态码详解与Nginx 文件上传大小限制

在我们日常使用 Nginx 搭建网站或应用服务时&#xff0c;可能会遇到很多与文件上传和请求响应相关的问题。今天我们就来聊聊 如何限制文件上传的大小&#xff0c;并介绍一些常见的 HTTP 状态码 及其在 Nginx 中的处理方式。 一、文件上传大小限制 有时&#xff0c;我们需要限…

Web3的崛起与智能合约的角色

随着Web3的发展&#xff0c;去中心化网络逐渐取代了以往的集中控制互联网模式。这一转变不仅强调了用户的自治权和隐私保护&#xff0c;还引入了智能合约这一核心技术。智能合约基于区块链技术&#xff0c;能够自动执行合约条款&#xff0c;无需中介干预&#xff0c;从而确保了…

git下载安装windows

https://git-scm.com/download/win 接下来傻瓜式安装就可以了

Django创建模型

1、根据创建好应用模块 python manage.py startapp tests 2、在models文件里创建模型 from django.db import modelsfrom book.models import User# Create your models here. class Tests(models.Model):STATUS_CHOICES ((0, 启用),(1, 停用),# 更多状态...)add_time mode…

RAR压缩包原密码过于简单如何修改密码?

RAR压缩包作为一种常见的文件压缩格式&#xff0c;广泛应用于文件传输和存储中。为了保障文件的安全性&#xff0c;用户经常会给RAR压缩包设置密码。但有时我们觉得原密码过于简单&#xff0c;想要修改成一个比较复杂的密码&#xff0c;这时我们要如何修改让人压缩包密码呢&…

<<编码>> 第 5 章 绕过拐弯的通信(Seeing Around Corners) 示例电路

灯泡通讯电路 info::操作说明 鼠标单击开关切换开合状态 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch05-01-communication-circuit.txt 双边灯泡通讯电路 info::操作说明 鼠…

Windows一键安装Mysql数据库|非官方复杂安装,解压即可,操作简单

我们都知道在官方安装mysql数据库极其复杂&#xff0c;还极大概率遇到各种问题&#xff0c;今天教大家只要解压就可安装完数据库&#xff0c;操作及其简单绿色。 版本包括了mysql8或mysql5&#xff0c;各位各取所需即可。 不管你之前是否安装过数据库&#xff0c;只要端口330…

Ai+若依(智能售货机运营管理系统---帝可得)--货道关联商品【08篇---0004:关联商品】

货道关联商品 需求 对智能售货机内部的货道进行商品摆放的管理 此功能涉及四个后端接口 查询设备类型&#xff08;已完成&#xff09; 查询货道列表&#xff08;待完成&#xff09; 查询商品列表&#xff08;已完成&#xff09; 货道关联商品&#xff08;待完成&#xff0…

个人学习笔记5-2:动手学深度学习pytorch版-李沐

#深度学习# #人工智能# #神经网络# 卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09; 6.4 多输入多输出通道 6.4.1 多输入通道 当输入包含多个通道时&#xff0c;需要构造一个与输入数据具有相同输入通道数的卷积核&#xff0c;以便与输入…

[基于 Vue CLI 5 + Vue 3 + Ant Design Vue 4 搭建项目] 07 如何修改 npm run serve 的启动端口号

如何修改 npm run serve 的启动端口号 首先&#xff0c;找到 npm run serve 对应的脚本 在 package.json 文件中找到 serve 对用的脚本 然后&#xff0c;添加 – port 新端口号 这里修改启动端口号为 9000&#xff0c;则在启动命令后面加上 --port 9000 最后&#xff0c;启动…