2月4号作业
编写程序实现二叉树的创建,三种遍历自己销毁
#include <myhead.h>#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define OK 1
#define ERROR 0#define INIT_SIZE 20
#define INCREMENT_SIZE 5typedef int Status;
typedef int TElemType;
//存储结构typedef struct BiNode{TElemType data;struct BiNode *lchild, *rchild;
}BiNode, *BiTree;typedef enum {Travel = 1,Visit = 0}TaskType;typedef struct{BiTree ptr;TaskType task;
}SElemType;typedef struct{SElemType *top;SElemType *base;int size;
}Stack;//栈的数据结构
//初始化栈
Status InitStack(Stack *S)
{S->base = (SElemType *)malloc(sizeof(SElemType)*INIT_SIZE);if(!S->base)exit(OVERFLOW);S->top = S->base;S->size = INIT_SIZE;return OK;
}//判断是否为空
Status IsEmpty(Stack S){if(S.base==S.top)return TRUE;return FALSE;}
//进入栈Status Push(Stack *S,SElemType e)//*S->top++=e{if((S->top - S->base) / sizeof(SElemType)>=S->size){S->base = (SElemType*)realloc(S->base,(S->size+INCREMENT_SIZE)*sizeof(SElemType));if(!S->base)exit(OVERFLOW);S->top = S->base + S->size;//从新申请了内存地址发生了变化S->size += INCREMENT_SIZE;}*S->top = e;//先取*s->top 在++//*++S->top先加再取值;S->top++;return OK;}//pop
Status Pop(Stack *S, SElemType *e)
{if(S->top == S->base)return ERROR;*e = *--S->top;return OK;}//创建二叉树(输入0结束)
Status CreateBiTree(BiTree *T)
{TElemType s;scanf("%d",&s);if(s==0)*T=NULL;else{*T = (BiTree)malloc(sizeof(BiNode));if(!T){return OVERFLOW;}(*T)->data = s;CreateBiTree(&(*T)->lchild);//修改指针的值使其指向创建的值CreateBiTree(&(*T)->rchild);}return OK;
}
//访问元素
void visit(TElemType e)
{printf("%d ",e);}
//先序遍历递归实现
Status PreOrderTraverse(BiTree T,void(*visit)(TElemType e))
{if(T){(*visit)(T->data);PreOrderTraverse(T->lchild,visit) ;PreOrderTraverse(T->rchild,visit);}}//中序遍历Status InOrderTraverse(BiTree T,void(*visit)(TElemType e))
{if(T){InOrderTraverse(T->lchild,visit);(*visit)(T->data);InOrderTraverse(T->rchild,visit);}}// houxuStatus PostOrderTraverse(BiTree T,void(*visit)(TElemType e))
{if(T){PostOrderTraverse(T->lchild,visit);PostOrderTraverse(T->rchild,visit);(*visit)(T->data);}}//前序遍历非递归
Status PreOrder(BiTree T,void(*visit)(TElemType e))
{Stack S;InitStack(&S);BiTree p;SElemType e;e.ptr = T;e.task = Travel;if(T)Push(&S,e);while(!IsEmpty(S)){Pop(&S,&e);if(e.task == Visit)visit(e.ptr->data);else{if(e.ptr){p = e.ptr;e.ptr = p->rchild;e.task = Travel;Push(&S,e);e.ptr = p->lchild;e.task = Travel;Push(&S,e);e.ptr = p;e.task = Visit;Push(&S,e);}}}}
//中序遍历非递归
Status InOrder(BiTree T,void(*visit)(TElemType e))
{Stack S;InitStack(&S);BiTree p;SElemType e;e.ptr = T;e.task = Travel;if(T)Push(&S,e);while(!IsEmpty(S)){Pop(&S,&e);if(e.task == Visit)visit(e.ptr->data);else{if(e.ptr){p = e.ptr;e.ptr = p->rchild;Push(&S,e);e.ptr = p;e.task = Visit;Push(&S,e);e.ptr = p->lchild;e.task = Travel;Push(&S,e);}}}}//houxu非递归
Status PostOrder(BiTree T,void(*visit)(TElemType e))
{Stack S;InitStack(&S);BiTree p;SElemType e;e.ptr = T;e.task = Travel;if(T)Push(&S,e);while(!IsEmpty(S)){Pop(&S,&e);if(e.task == Visit)visit(e.ptr->data);else{if(e.ptr){e.task = Visit;Push(&S,e);p = e.ptr;e.ptr = p->rchild;e.task = Travel;Push(&S,e);e.ptr = p->lchild;e.task = Travel;Push(&S,e);}}}}int main()
{BiTree T;printf("创建树,输入0为空树:\n");CreateBiTree(&T);printf("先序遍历递归:");PreOrderTraverse(T, *visit);printf("\n中序遍历递归:");InOrderTraverse(T, *visit);printf("\n后序遍历递归:");PostOrderTraverse(T, *visit);printf("\n");printf("\n前序非递归算法: ");PreOrder( T,*visit);printf("\n中序非递归算法: ");InOrder( T,*visit);printf("\n后序非递归算法: ");PostOrder( T,*visit);return 0;
}
相关文章:

2月4号作业
编写程序实现二叉树的创建,三种遍历自己销毁 #include <myhead.h>#define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define OK 1 #define ERROR 0#define INIT_SIZE 20 #define INCREMENT_SIZE 5typedef int Status; typedef int TElemType; //存储结构…...

瑞_23种设计模式_建造者模式
文章目录 1 建造者模式(Builder Pattern)1.1 介绍1.2 概述1.3 创作者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 模式拓展 ★★★4.1 重构前4.2 重构后 5 总结5.1 建造者模式优缺点5.2 建造者模式使用场景5.3 建造者模式 …...
GA/T 1707-2019 防爆安全门检测
防爆安全门是指能抵抗爆炸冲击波作用的特种防护门,根据防爆门的防爆性能的不同,分为非接触爆炸防爆门和防接触爆炸防爆门,根据防爆能力的不同,分为不同等级。 GA/T 1707-2019 防爆安全门检测项目 测试项目 测试标准 外观质量 …...
k8s学习-数据管理
在Docker中我们知道,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中,常用的手段就是Volume数据卷。在K8S中,也提供了存储模型Volume&…...

java hutool工具类实现将数据下载到excel
通过hutool工具类,对于excel的操作变得非常简单,上篇介绍的是excel的上传,对excel的操作,核心代码只有一行。本篇的excel的下载,核心数据也不超过两行,简洁方便,特别适合当下的低代码操作。 下载…...

【C/Python】Gtk部件ListStore的使用
一、C语言 在GTK中,Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型,用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例,该示例创建了一个列表,并在图形界面中显示: …...

Swift 入门之自定义类型的模式匹配(Pattern Matching)
概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样,在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中,模式匹配(Pattern …...

MySQL-----DML基础操作
DML语句 DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 ▶ 添加数据(INSERT) 【语法】 1. 给指定字段添加数据 INSERTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...); 2.给全…...

提前祝大家新年好!来看看社区 2023 都得了哪些奖吧
大噶好!转眼马上就是“龙”历新年啦,不知道大家这周的工作热情怎么样呢?小陈的心已经在殷切期盼回家过年了~ RTE 开发者社区预祝诸位: 2024 年 🐲龙年添财气,万事皆胜意! 回顾过去…...

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”
前言 随着业务数据的增加(比如电商业务中,随着用户规模和商品数量的增加),就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群,把数据分散保存到不同的实例上。但是这样做的话,如果要保存的…...
qt-C++笔记之contains()和isEmpty()函数、以及部分其他函数列举
qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举 code review! 文章目录 qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举contains()isEmpty() 类似的其他函数列举通用容器类函数字符串特有函数 在Qt C开发中, contains() 和 isEmpty()…...

极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁
文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说,代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示,他可能因服务器运营费用而面临破产。据他透…...

MagicVideo-V2:多阶段高保真视频生成框架
本项工作介绍了MagicVideo-V2,将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处,MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…...

【三】【C++】类与对象(二)
类的六个默认成员函数 在C中,有六个默认成员函数,它们是编译器在需要的情况下自动生成的成员函数,如果你不显式地定义它们,编译器会自动提供默认实现。这些默认成员函数包括: 默认构造函数 (Default Constructor)&…...
ffmpeg 输入文件,输入出udp-ts 指定pid
要使用FFmpeg将输入文件转换为UDP传输流(TS)并指定特定的PID,您可以使用以下命令: ffmpeg -i input_file -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts -map 0:v:0 -map 0:a:0 -pid 0x12345678 udp://output_addr…...

自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)
国内有非常多好用的人工智能工具,但均无法完全替代国外ChatGpt。 ChatGPT相较于其他国内工具的优势在于以下几点: 创新的语言生成能力:ChatGPT是由OpenAI开发的先进的自然语言生成模型,它采用了大规模的预训练和精细调整方法。因此…...

Stable Diffusion 模型下载:ReV Animated
模型介绍 该模型能够创建 2.5D 类图像生成。此模型是检查点合并,这意味着它是其他模型的产物,以创建从原始模型派生的产品。 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者s6yx文件名称revAnimated_v122EOL.safetensors文件大小5.13GB 生成案例 …...

某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现
0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…...

Prometheus 采集Oracle监控数据
前言 oracledb_exporter是一个开源的Prometheus Exporter,用于从Oracle数据库中收集关键指标并将其暴露给Prometheus进行监控和告警。它可以将Oracle数据库的性能指标转换为Prometheus所需的格式,并提供一些默认的查询和指标。 download Oracle Oracle Windows Install …...

【ARM Trace32(劳特巴赫) 使用介绍 3.1 -- 不 attach core 直接访问 memory】
文章目录 背景介绍背景介绍 在使用 trace32 时在有些场景需要不 attach core 然后去读写 memory,比如在某些情况下 core 已经挂死连接不上了,这个时候需要dump内存,这个时候需要怎做呢? print "test for memory access directly";SYStem.OPTION WAITRESET OF…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...