2022/12/30总结

news2024/9/27 12:14:19

今日学习了二叉树有关知识。

二叉树

二叉树通俗来讲就是一个有俩个指针的链表。他们大多长这个样子:

这里还有俩个概念了,二叉树分为完全二叉树和满二叉树

上面所说的是满二叉树,顾名思义就是每个父节点都相应的有俩个指针,通常左边的叫左孩子或者左子树,右边的叫右孩子或者右子树。

而完全二叉树是可以在最底端的右边连续的没有节点比如下面这俩个:

 

 

 

这俩个都是完全二叉树。

这里扩展一下堆:堆是一个完全二叉树。堆(Heap)是计算机科学中一类特殊的数据结构,是最高效的优先级队列。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆中的某个节点的值总是不大于或者不小于其父节点。根节点最大的堆叫做最大堆或者大根堆,根节点最小的堆叫做最小堆或者小根堆。常见的堆有二叉堆和斐波拉契堆。堆是非线性结构。

二叉树有四种遍历方式:

先序遍历,中序遍历,后序遍历,层序遍历。

前面三种是根据根节点的次序划分的,先序遍历就是先遍历根节点,再依次是左子树,右子树。中序遍历就是把根节点放在中间,是左根右的结构(左子树,根节点,右子树)。后序遍历是把根节点放在最后的,所以它的遍历是左右根。而层序遍历就是一层一层遍历。

 

如果按照上面所说的遍历方式,那么:

先序遍历:1->2->4->8->9->5->3->6->7

中序遍历:8->4->9->2->5->1->6->3->7

后序遍历:8->9->4->5->2->6->7->3->1

层序遍历:1->2->3->4->5->6->7->8->9

      如果还是不太能够理解这些遍历的方式,我强烈推荐大家去看这篇文章二叉树三种遍历(动态图+代码深入理解)_杨 戬的博客-CSDN博客_写出如下二叉树三种遍历的结果写的很好,很浅显易懂。

然后就是代码实现咯。

1.我们创建有左右俩个指针的结构体。

2.在创建的时候我用的是先序顺序去创建,因为这样子好写一点。然后我写的是递归写法,判断当前的数字是不是0,是0就返回NULL,如果不是那么可以继续左右创建。(当然输入的时候如果末尾的节点没有左节点或者右节点,我们是需要输入俩个0的)。

3.输出遍历方式,运用递归也是蛮简单的,按照先序遍历的话,就是先输出根节点,再把左子树拿去遍历即可。而中序就是利用递归的思想,先调用head->lnext;然后输出根节点,最后调用head->rnext;而后序也是一样的道理。

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
	int x;
	struct node *lnext;
	struct node *rnext;
}NODE;
NODE* creat()
{
	int k;
	NODE *head;
	scanf("%d",&k);
	if(k==0) return NULL;
	head=(NODE *)malloc(sizeof(NODE));
	head->x=k;
	head->lnext=creat();
	head->rnext=creat();
	return head;
}
int xxput(NODE *head)
{
	if(head==NULL) return 0;
	printf("%d ",head->x);
	xxput(head->lnext);
	xxput(head->rnext);
}
int zxput(NODE *head)
{
	if(head==NULL) return 0;
	zxput(head->lnext);
	printf("%d ",head->x);
	zxput(head->rnext);
}
int hxput(NODE *head)
{
	if(head==NULL) return 0;
	hxput(head->lnext);
	hxput(head->rnext);
	printf("%d ",head->x);
}
int main()
{
	NODE *head;
	puts("请输入你所要创建的二叉树先序遍历(输入0代表结束当前子树):");
	head=creat();
	puts("先序遍历为:");
	xxput(head);
	puts("");
	puts("中序遍历为:");
	zxput(head);
	puts("");
	puts("后序遍历为:");
	hxput(head);
	puts("");
	return 0;
}

 

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

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

相关文章

基于springboot+Vue的宿舍管理系统前后端分离(程序+详细文档+数据库)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

前端devops——利用gitlab实现CI/CD自动化部署

目录 前言 一、前期准备 1、开启虚拟服务 2、下载并安装docker 二、开始部署 1、安装gitlab 2、修改默认账号登录密码 3、修改项目clone地址 三、Gitlab CI/CD 1、安装并运行gitlab-runner 2、执行runner 3、将项目注册到gitlab-runner 1、获取token 2、执行注册 …

ETL数据清洗

大多数据仓库的数据架构可以概括为&#xff1a; 数据源-->ODS(操作型数据存储)-->DW-->DM(data mart) ETL贯穿其各个环节。 ​一、数据抽取&#xff1a; 可以理解为是把源数据的数据抽取到ODS或者DW中。 1. 源数据类型&#xff1a; 关系型数据库&#xff0c;如Or…

多模态串讲(上)

多模态的学习在最近几年异常火爆&#xff0c;除了普通的多模态学习&#xff0c;比如视觉问答&#xff0c;图文检索等,其实之前讲的所有这种Language Guided Detection&#xff0c;或者Language Guided Segmentation&#xff0c;这些任务都是多模态的&#xff0c;还有最近火的文…

SpringCloud之负载均衡Ribbon

1.Ribbon是什么&#xff1f; •Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。 •Ribbon主要有两个功能&#xff1a; 1.简化远程调用 2.提供客户端的软件负载均衡算法 Ribbon客户端组件提供一系列完善的配置项&#xff0c;如连接超时&#xff0c;重试等…

ERA5数据不同下载方法

ERA5数据不同下载方法1 ERA5简介2 ERA5下载的三种方法2.1 方法1&#xff1a;GEE下载2.2 方法2&#xff1a;官方网站下载2.3 方法3&#xff1a;通过Python脚本下载&#xff08;以Linux系统为例&#xff09;总结参考1 ERA5简介 ERA5是ECMWF对全球气候的第五代大气再分析。再分析…

ArcGIS基础实验操作100例--实验17按条件计算属性字段值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验17 按条件计算属性字段值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

工业远程I/O模块CANopen I/O模块 安装接线说明

1&#xff09;外观尺寸 DIN35mm Rail标准导轨支架外观与尺寸&#xff1a; 2&#xff09;面板说明 指示灯说明运行指示灯 绿色预留预留错误指示灯 红色CANopen地址设置开关&#xff0c;CANopen 通讯速率设置开关&#xff0c;当 0表示通信速率为10Kbps 4表示通信速率为250Kbps 1表…

Linux | 内存 | 由内存页不足(page allocation failure)引起程序杀死(OOM Killer)

本文对由于 page allocation failure 而引起 Out of Memory Killer 的背景及工作原理进行不完全总结。 更新&#xff1a;2022 / 12 / 30 文章目录触发条件__alloc_pages_slowpath()__vmalloc_area_node()__vmalloc_node_range工作原理结合实例1.2.GFP_ATOMIC 和 __GFP_COMP&am…

阿里云弹性预测 AHPA:助力厨芯科技降本增效

作者&#xff1a;李鹏&#xff08;元毅&#xff09; “使用阿里云弹性预测 AHPA&#xff0c;降低了 K8s 容器成本&#xff0c;同时减轻了运维工作量&#xff0c;加速了业务容器化的进程。”—— 朱晏(厨芯科技VP) 背景 厨芯科技&#xff0c;是全球领先的餐饮设备和服务提供商…

TCP 的报头结构 和 三次握手---详解(看完必会)

TCP 的三次握手&#xff1a; 在搞懂三次握手前&#xff0c;必须要搞明白TCP报头的结构内容 TCP报头结构&#xff1a; 源端口号 : 源计算机上的应用程序的端口号&#xff1b;目的端口号 : 目标计算机的应用程序端口号&#xff1b;序列号&#xff1a;客户端给服务端发送数据时…

React 配置文件(二) 配置环境变量

开发环境一般分为: UAT(测试环境) PRE(预上线环境) PROD(生产环境) 所以本地开发分别搭建相对应环境 2.安装 dotenv 3.在package.json文件中配置环境 "scripts": { "start": "react-app-rewired start", "uat": "dotenv…

【Linux】文件系统与inode

一、文件系统 理解文件系统前首先我们要来先了解一下磁盘结构。 接下来我们看看以水平、垂直角度来看看磁盘结构&#xff0c;并将其区域进行划分。 磁盘的垂直分布 (此图最上面的一面和最下面的一面无磁头&#xff0c;则不存储数据)&#xff1a; 磁头数&#xff1a;磁头就是在…

LeetCode303.区域和检索 - 数组不可变

LeetCode刷题记录 文章目录&#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码&#x1f4dc;题目描述 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其中…

Windows nc命令下载使用与使用bash建立反弹shell

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Windows nc命令下载使用与使用bash建立反弹shell。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强…

磨金石教育摄影技能干货分享|王汉冰摄影作品欣赏—《沙狐之眼》

一、偏爱新疆风光的摄影师王汉冰 王汉冰是新疆人&#xff0c;身为摄影师的他对新疆的大好风光有着强烈的偏爱。 因此经常驾车游历&#xff0c;期望寻找到好的风景&#xff0c;将它记录下来&#xff0c;让世人都能感受到大美新疆的壮丽。 在今年七月&#xff0c;王汉冰来到巴音郭…

C语言 内存函数 自定义类型 结构体 枚举 联合

perror #include <stdio.h> #include <errno.h> #include <string.h>//strerror //perror与上相关 更加方便直接打印错误信息 上边需要先将错误码转换为错误信息 再用printf打印 // int main() {//打开文件失败的时候&#xff0c;会返回NULLFILE* pf fo…

同为(TOWE)IPS系列工业插头插座、连接器的选型及特点

所谓工业插头插座、连接器&#xff0c;即欧洲标准插头插座&#xff0c;主要用于实现电信号的传输和控制以及电子与电气设备之间的电源连接。它可以通过连接器插头与插座之间的插合和分离&#xff0c;使电路产生接通和断开&#xff0c;适用于对安全、寿命和性能具有高要求的应用…

5款OCR文字识别软件推荐_分享好用的OCR(图片转文字)工具

5款OCR文字识别软件推荐 不知道大家是不是不知道OCR单词识别这个词。 小编认为&#xff0c;经常处理各种办公文件的朋友&#xff0c;对OCR文字识别这个词肯定有一定的了解&#xff0c;因为在处理办公文件的时候&#xff0c;很有可能会遇到对OCR文字识别的需求。 而当我们遇到O…