语言的数据结构:树与二叉树(二叉树篇)

news2024/11/23 19:04:24

语言的数据结构:树与二叉树(二叉树篇)

  • 前言
  • 概念
  • 特别的二叉树
    • 满二叉树
    • 完全二叉树
  • 存储结构
    • 顺序存储
    • 链式存储
  • 查找方式

前言

上文说到了树,有人认为二叉树是树的每一个分支都有两个子节点。其实这也对。但二叉树在此基础上还做了限制。比如区别了左子树与右子树。也就是说,当二叉树的根只有一个孩子时,也需要知道这个是左孩子还是右孩子。就是因为这个原因,让二叉树的性能相对于树有了明显的提高。也让二叉树成了一个全新的概念,而不是树的一个特别情况而已。

概念

二叉树(Binary Tree) 是树的一种常见形式,它是一棵有序树。它的子节点最多只有两个,分为左子树和右子树,哪怕只有一个子节点,也要区分出是左子树还是右子树,如果颠倒了,就是一棵新的二叉树了。二叉树的度最大为2。
二叉树常被用于实现二叉查找树和二叉堆,树的很多问题都可以通过 B F S 广度优先搜索算法 \color{orange} BFS广度优先搜索算法 BFS广度优先搜索算法 D F S 深度优先搜索算法( D e p t h F i r s t S e a r c h ) \color{orange}DFS深度优先搜索算法(Depth First Search) DFS深度优先搜索算法(DepthFirstSearch解决。

特别的二叉树

满二叉树

一个二叉树,如果它有子节点,并且子节点数都是最大值( 在每一层上没有空缺的位置 \color{orange}在每一层上没有空缺的位置 在每一层上没有空缺的位置),则称为满二叉树。一个满二叉树,除了根节点,其余节点数都是2个一起出现的,如 B与C、D与E、F与G。 所以如果满二叉树的层级为K,则
节点数
  2 k − 1 \ 2^k-1  2k1 。这个 -1,就是因为根节点只有一个。
如果节点数为N,则
高度
: h = l o g 2 ( N + 1 ) log_2(N+1) log2(N+1)
image.png

完全二叉树

满二叉树是完全二叉树特殊情况,当满二叉树从最后的节点依次减少时,形成的就是完全二叉树。完全二叉树从根节点、左子树、右子树的顺序执行,一直到树结束都没有空缺的节点。
image.png
image.png

存储结构

顺序存储

可以使用数组来存储。但只适用于满二叉树和完全二叉树的情况。否则如果中间缺失了节点,在数组中相应的位置就要空在那里,造成了空间的浪费。之所以F的位置要空在这里,是因为G是C的右子树,而左子树是没有节点的。如果那个位置不空着,则G就表示为左子树了。这也就是用数组存储的不好之处了。

image.png image.png

链式存储

用链表来创建树结构。注意:此时用链表来表示树,并非说此时的树就是线性结构。而是用链表重新去定义一种数据结构。此时这个结构只能称作树,而不可以称作链表。
用链表创建树的好处就是左子树与右子树的表示。如上面的示例,直接在每个节点上存储三个信息:1、数据本身的信息,2、左子树的指针,3、右子树的指针。这时G就直接可以表示为C的右子树,而其左子树指向NULL。

// 二叉树节点的结构体定义  
typedef struct TreeNode {  
    int val;            // 节点的值  
    struct TreeNode *left;   // 左子树  
    struct TreeNode *right;  // 右子树  
} TreeNode; 

查找方式

对二叉树的查找有三种方式,是按照查找根的点的顺序来区分的。 先序 \color{orange}先序 先序(根节点、左子树、右子树), 中序 \color{orange}中序 中序(左子树、根节点、右子树), 后序 \color{orange}后序 后序(左子树、右子树、根节点)。

image.png

前序的访问顺序:A B D E C G
中序的访问顺序:D B E A C G
后序的访问顺序:D E B G C A

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

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

相关文章

支持离线翻译任意语言的桌面应用程序;单张图像高效生成高质量的 3D 模型;2500种色彩映射的集合,适用于matplotlib和seaborn

✨ 1: Lingo Lingo是一款支持离线翻译任意语言的桌面应用程序 Lingo 是一款支持离线翻译的桌面应用程序,用户可以在不连接互联网的情况下进行多语言翻译。这款软件利用了Meta公司提供的nllb-200-distilled-600M 多语言模型,以实现高效的翻译功能。 没…

jupyter notebook的markdown语法不起作用

在这个界面编辑,发现markdown你编辑的是什么就是什么,不起作用,然而点一下: 右上角“Notebook转发”,就会单独跳出一个jupyter notebook的界面,此时就会奏效:

6.25作业

1.整理思维导图 2.终端输入两个数,判断两数是否相等,如果不相等,判断大小关系 #!/bin/bash read num1 read num2 if [ $num1 -eq $num2 ] then echo num1num2 elif [ $num1 -gt $num2 ] then echo "num1>num2" else echo &quo…

大学生搜题神器网站?分享七个支持答案和解析的工具 #职场发展#学习方法

在现代科技的帮助下,大学生们有幸能够利用各种日常学习工具来提升自己的学习效果。 1.全球翻译官 是一款在线翻译语言的服务平台,在app中,用户能够在线通过语音,拍照来翻译语言,非常的便捷,也支持文字翻译哦 全球翻…

SDA626 3A,4.5V-16V输入,500kHz同步降压型转换器

一般说明 该SDA626是一个完全集成,高效率的3A同步整流降压转换器。该SDA626工作在一个宽的输出电流负载范围高效率该设备提供两种工作模式,PWM控制和PFM模式切换控制,这使得在更广泛的负载范围内具有较高的效率。 SDA626需要最…

浦语·灵笔2 模型部署图片理解实战

效果图镇楼 1、使用 huggingface_hub 下载模型中的部分文件(演示练习与模型实战无关) 使用 Hugging Face 官方提供的 huggingface-cli 命令行工具。安装依赖: pip install -U huggingface_hub 然后新建 python 文件,填入以下代码&#xf…

Ubuntu20.04使用Samba

目录 一、Samba介绍 Samba 的主要功能 二、启动samba 三、主机操作 四、Ubuntu与windows系统中文件互联 五、修改samba路径 一、Samba介绍 Samba 是一个开源软件套件,用于在 Linux 和 Unix 系统上实现 SMB(Server Message Block)协议…

iptables(4)规则匹配条件(源、目、协议、接口、端口)

简介 前面我们已经介绍了iptables的基本原理,表、链,数据包处理流程。如何查询各种表的信息。还有基本的增、删、改、保存的基础操作。 经过前文介绍,我们已经能够熟练的管理规则了,但是我们只使用过一种匹配条件,就是将”源地址”作为匹配条件。那么这篇文章中,我们就来…

为什么小程序每次提交会有很多unpackage下的文件

解决办法.gitignore 文件 .DS_Store /unpackage# local env files .env.local .env.*.local# Log files npm-debug.log* yarn-debug.log* yarn-error.log*# Editor directories and files .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw?

获取 S 参数仿真中属性所对应的值

获取 S 参数仿真中属性所对应的值 引言正文对 S41 参数进行获取方法一方法二方法三引言 应该有很多小伙伴有过困惑,在进行 S 参数扫描后,想要可视化一下对应参数的图像,每次手动点击一个是比较麻烦,另一个是显示的效果并不是很美观。此时,如果我们可以使用 Lumerical 脚本…

工作之建造者模式

刚刚开通了一个公众号,会分享一些技术博客和自己觉得比较好的项目,同时会更新一些自己使用的工具和图书资料,后面会整理一些面试资料进行分享,觉得有兴趣的可以关注一下。 项目场景: 工作中最近对接的第三方系统的AP…

数组,链表,红黑树介绍以及性能对比实验

作者:晓宜 🌈🌈🌈 个人简介:携程javaer,阿里云专家博主,csdn后端优质创作者,算法爱好者 ❤️❤️❤️ 一起进步!!!😊 前言 以前学了数…

安装zabbix时报错Could not resolve host: mirrors.huaweicloud.com;Unknown error解决办法

目录 1、问题原因 2、解决办法 3、知识拓展 DNS的区别 DNS配置文件解析 域名解析过程 4、书籍推荐 当安装Zabbix server,Web前端,agent时出现: [rootsc-zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent安装过程中会出…

【咨询】企业数字档案馆建设规划建议书-模版范例

导读:本文提供范例可以作为xxx建设规划建议书模版 建议书结构 第一章 项目背景及意义 1.1.企业数字档案馆建设是构建新质生产力的重要抓手 1.2.企业数字档案馆建设是落实全国档案事业发展规划的重要支撑 1.3.企业数字档案馆建设是支撑提质增效、高质量发展的有效…

利用scalene进行性能分析和优化

​ 上一篇文章,我们详细讲解了Py-Spy这个性能分析和优化工具的使用流程;今天,我们将深入探讨另一个性能分析和优化工具——scalene。 什么是scalene? scalene是一个高精度的Python性能分析工具,可以对CPU和内存使用情…

为什么说大数据对电子商务卖家至关重要?||电商API接口

从数据中获取价值的重要性,远甚以往。 由于新冠的爆发,所有B2B公司都被迫将业务转到线上的电子商务平台以加速数字化转型;而随着疫情逐渐褪去,这种线上线下混合的趋势得以进一步加强。 企业希望能够在自己选定的设备上&#xff0c…

视频太大如何压缩上传微信

视频太大如何压缩上传微信,视频已成为人们生活中不可或缺的一部分。然而,视频文件的大小也在不断增加,这给存储和传输带来了极大的挑战。下面给大家分享一个视频太大不能发微信的解决方法。 打开 “51视频处理官网 的网站。上传视频。 ​视频…

CentOS9镜像下载地址加速下载

CentOS 9 是 CentOS 项目的最新版本之一,它基于 RHEL(Red Hat Enterprise Linux)9 的源代码构建。CentOS(Community ENTerprise Operating System)是一个免费的企业级 Linux 发行版,旨在提供一个与 RHEL 兼…

花样玩转“所见即所得”的可视化开发UI

随着技术的发展,用户对软件的界面美观度和交互体验的要求越来越高。在这样的背景下,可视化开发UI(User Interface)成为了提升用户体验和开发效率的重要工具。 通过图形界面来设计和构建用户界面的方法,可视化开发UI可…

ROS CDK魔法书:点亮博客上云新技能(TypeScript篇)

引言 在数字世界的浩瀚海洋中,信息与数据如同戏剧中的主角,舞动着无形的旋律,构建起信息时代的交响乐。而在这其中,作为一位技术领域的探索者,你的使命便是挥舞着编码的魔杖,创造和守护着这些宝贵的数字灵…