树的基本操作(数据结构)
树的创建
//结构结点
typedef struct Node
{int data;struct Node *leftchild;struct Node *rightchild;
}*Bitree,BitNode;//初始化树
void Create(Bitree &T)
{int d;printf("输入结点(按0为空结点):");scanf("%d",&d);if(d!=0){T = (Bitree)malloc(sizeof(BitNode));T->data=d;Create(T->leftchild);Create(T->rightchild);}else{T=NULL;return;}
}
遍历树(递归)
//先序遍历
void PreOrder(Bitree &T)
{Bitree D;D=T;if (D){printf("%d", D->data);PreOrder(D->leftchild);PreOrder(D->rightchild);}
}//中序遍历
void InOrder(Bitree &T)
{Bitree D;D=T;if (T){InOrder(D->leftchild);printf("%d", D->data);InOrder(D->rightchild);}}//后序遍历
void PostOrder(Bitree &T)
{Bitree D;D=T; if (T){PostOrder(D->leftchild);PostOrder(D->rightchild);printf("%d", D->data);}
}
非递归遍历
#define MaxSize 100
typedef struct{BitNode *data[MaxSize];int top;
}SqStack;//初始化栈
void InitStack(SqStack &S){S.top = -1;
} //判断栈空
bool StackEmpty(SqStack S){if(S.top==-1) return true;//空栈else return false;
} //进栈
void Push(SqStack &S, BitNode *x){if(S.top==MaxSize-1) return;//满栈S.top = S.top+1;//指针加1S.data[S.top]=x;//新元素入栈
} //出栈
BitNode* Pop(SqStack &S){if(S.top==-1) return NULL;//空栈BitNode *x;x= S.data[S.top];S.top = S.top-1; return x;
}
//非递归遍历
void InOrder2(Bitree &T){SqStack S;InitStack(S);//初始化栈 Bitree P=T;//p是遍历指针 while(P||!StackEmpty(S)){if(P){//一路向左 Push(S,P);//当前结点入栈 P=P->leftchild;//左孩子不为空,一直向左走 } else{P=Pop(S);//出栈,并转向右子树 printf("%d",P->data);//输出出栈元素 P=P->rightchild;//向右子树走 }}
}void PreOrder2(Bitree &T){SqStack S;InitStack(S);//初始化栈 Bitree P=T;//p是遍历指针 while(P||!StackEmpty(S)){if(P){//一路向左 printf("%d",P->data);Push(S,P);//当前结点入栈 P=P->leftchild;//左孩子不为空,一直向左走 } else{P=Pop(S);P=P->rightchild; }}
}
层次遍历
#define MaxSize 100
typedef struct{int front,rear;BitNode *data[MaxSize];
}SqQueue;//初始化队列
void InitQueue(SqQueue &Q){Q.front=Q.rear=0;
} //判断队列是否为空
bool QueueEmpty(SqQueue Q){if(Q.front==Q.rear) return true;//空队列else return false;
}//入队
bool EnQueue(SqQueue &Q,BitNode *x){if((Q.rear+1)%MaxSize==Q.front){//判断队满return false; }Q.data[Q.rear]=x;//新元素入队 Q.rear = (Q.rear+1)%MaxSize;//队尾指针加一取模 让队列循环使用 return true;
} //出队
BitNode* DeQueue(SqQueue &Q){if(Q.front==Q.rear) return NULL;//队列为空 BitNode *x;x = Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;//对头指针后移 return x;
} //层次遍历
void LevelOrder(Bitree &T){SqQueue Q;InitQueue(Q);Bitree P;EnQueue(Q,T);while(!QueueEmpty(Q)){P=DeQueue(Q);printf("%d ",P->data);if(P->leftchild!=NULL)EnQueue(Q,P->leftchild);if(P->rightchild!=NULL)EnQueue(Q,P->rightchild);}
}
主函数
int main(){Bitree T;Create(T);printf("前序遍历:");PreOrder(T);printf("\n");printf("中序遍历:");InOrder(T);printf("\n");printf("后序遍历:");PostOrder(T);printf("\n");printf("中序遍历(非):");InOrder2(T);printf("\n");printf("前序遍历(非):"); PreOrder2(T);printf("\n");printf("层次遍历:");LevelOrder(T);return 0;
}

相关文章:
树的基本操作(数据结构)
树的创建 //结构结点 typedef struct Node {int data;struct Node *leftchild;struct Node *rightchild; }*Bitree,BitNode;//初始化树 void Create(Bitree &T) {int d;printf("输入结点(按0为空结点):");scanf("%d",&d);if(d!0){T (Bitree)ma…...
Python复刻游戏《贪吃蛇大作战》
入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 曾经有一款小游戏刷屏微信朋友圈,叫做《贪吃蛇大作战》。一个简单到不行的游戏,也不知道怎么就火了,还上…...
SpringCloud之Gateway整合Sentinel服务降级和限流
1.下载Sentinel.jar可以图形界面配置限流和降级规则 地址:可能需要翻墙 下载jar文件 2.引入maven依赖 <!-- spring cloud gateway整合sentinel的依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-s…...
深度学习——深度卷积神经网络(AlexNet)
深度学习——深度卷积神经网络(AlexNet) 文章目录 前言一、学习表征二、AlexNet实现2.1. 模型设计2.2. 激活函数2.3. 容量控制与预处理2.4. 训练模型 总结 前言 在前面学习了卷积神经网络的基本原理,之后将继续学习现代卷积神经网络架构。而本章将学习其…...
提高编程效率-Vscode实用指南
您是否知道全球73%的开发人员依赖同一个代码编辑器? 是的,2023 年 Stack Overflow 开发者调查结果已出炉,Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE,与专业…...
ES 数据库
ES 数据库 通过 API 查询通过 JSON 查询 熟悉 es 的同学都知道 es 一般有两种查询方式 1,在 java 中构建查询对象,调用 es 提供的 api 做查询 2,使用 json 调用接口做查询 查询语句无非是将足够的信息丢给数据库,但是它却和 SQL …...
面试经典150题——Day14
文章目录 一、题目二、题解 一、题目 134. Gas Station There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith stati…...
Pika v3.5.1发布!
Pika 社区很高兴宣布,我们今天发布已经过我们生产环境验证 v3.5.1 版本,https://github.com/OpenAtomFoundation/pika/releases/tag/v3.5.1 。 该版本不仅做了很多优化工作,还引入了多项新功能。这些新功能包括 动态关闭 WAL、ReplicationID…...
Kotlin中的数组
数组是一种常见的数据结构,用于存储相同类型的多个元素。在 Kotlin 中,我们可以使用不同的方式声明、初始化和操作数组。 在 Kotlin 中,有多种方式可以定义和操作数组。我们将通过以下示例代码来展示不同的数组操作: fun main()…...
(3) OpenCV图像处理kNN近邻算法-识别摄像头数字
目录 一、代码简介 二、程序代码 三、使用的图片资源 1、图片digits.png...
上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走,深成指、创业板指均跌超1%,双双创出年内新低。转基因概念股逆势大涨…...
abap中程序跳转(全)
1.常用 1.CALL TRANSACTION 1.CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK [AND SKIP FIRST SCREEN]. 其中ta为事务码tcode使用时要打单引号() 2. CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK USING bdc_tab { {[MODE mode] [UPDATE u…...
启动速度提升 10 倍:Apache Dubbo 静态化方案深入解析
作者:华钟明 文章摘要: 本文整理自有赞中间件技术专家、Apache Dubbo PMC 华钟明的分享。本篇内容主要分为五个部分: -GraalVM 直面 Java 应用在云时代的挑战 -Dubbo 享受 AOT 带来的技术红利 -Dubbo Native Image 的实践和示例 -Dubbo…...
PCB命名规则-allegro
PCB命名规则-allegro 一、焊盘命名规则 1、 贴片矩形焊盘 命名规则:SMD长(L)宽(W)(mil) 举例:SMD90X60 2、 贴片圆焊盘 命名规则:SMDC焊盘直径(D&…...
[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工
目录 前言: - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…...
探索数字时代的核心:服务器如何塑造未来并助你成就大业
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
spring6-资源操作:Resources
资源操作:Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…...
C语言 内存
内存分配 内存分配的类型 C/C中内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配:编译时分配,包括全局、静态全局、静态局部三种变量。 动态内存分配:运行时分配,包括栈&#x…...
Java设计模式之备忘录模式
备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象内部状态的情况下捕获和恢复对象的内部状态。该模式通过在对象之外保存和恢复对象的状态,使得对象可以在需要时回滚到之前的状态。 在备忘录模式中ÿ…...
深度学习 | Pytorch深度学习实践
一、overview 基于pytorch的深度学习的四个步骤基本如下: 二、线性模型 Linear Model 基本概念 数据集分为测试集和训练集(训练集、开发集)训练集(x,y)测试集只给(x)过拟合…...
源网荷储全场景适配:新型电力系统时序数据库落地指南
新型电力系统应该用什么数据库?源网荷储四侧的时序数据库选型与落地实战 “双碳”目标的推进正在深刻重构电力系统的运行逻辑。新能源装机占比持续攀升,储能、虚拟电厂、需求响应等新业态快速涌现,源、网、荷、储各侧的角色与互动方式正在被…...
突破传统:用Arduino SI4735库打造全频段数字收音机方案
突破传统:用Arduino SI4735库打造全频段数字收音机方案 【免费下载链接】SI4735 SI473X Library for Arduino 项目地址: https://gitcode.com/gh_mirrors/si/SI4735 你是否曾梦想过亲手打造一台能接收全球广播的专业收音机?面对传统模拟电路的复杂…...
LxgwWenkaiGB:合规开源字体的专业应用指南
LxgwWenkaiGB:合规开源字体的专业应用指南 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB LxgwWenkaiGB(霞鹜文楷 GB)作为…...
Java AI开发避坑!
文章目录一、当"龙虾"突然发狂二、解剖这场"史诗级翻车"第一刀:插件生态大迁徙第二刀:API 接口一锅端第三刀:安全沙箱锁死第四刀:目录结构洗牌三、Java 开发者的至暗时刻WebSocket 连接闪断MCP 适配器失效技能…...
python-flask-djangol框架的关爱空巢老人和孩子留守儿童管理系统的设计和实现
目录需求分析与规划技术选型核心模块设计数据安全与权限开发与测试计划社区与可持续性项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与规划 明确系统核心功能模块:空巢老人健康监测、留守儿童学习与心理辅…...
AI虚拟员工平台完整搭建教程:从源码获取到正式上线,全流程记录
温馨提示:文末有资源获取方式最近AI赛道又火了一个新方向,很多人都在讨论,但真正能用起来的没几个。技术门槛摆在那,普通用户想上手确实不容易。今天这篇教程,我把从源码部署到正式上线的完整过程整理出来,…...
Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南
Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 你是否曾经因为AI图像编辑工具操作复杂而头疼?是否厌倦…...
《其他 W3C 活动》
《其他 W3C 活动》 引言 W3C(World Wide Web Consortium,万维网联盟)是全球领先的互联网技术标准制定机构。自1994年成立以来,W3C致力于推动互联网技术的标准化,为全球的互联网发展做出了重要贡献。除了核心的HTML、CS…...
如何3步实现ComfyUI-Manager配置加密?揭秘敏感数据保护全方案
如何3步实现ComfyUI-Manager配置加密?揭秘敏感数据保护全方案 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 在使用ComfyUI-Manager管理自定义节点和模型时,配置文件中往往包含API密钥、数据库…...
Java面试如何突击?核心知识点有哪些?该如何准备拿下offer?
一、Java 面试核心知识点(按考察优先级排序)1. Java 基础面向对象:封装、继承、多态(重载与重写)、抽象类与接口的区别。String 系列:String 不可变性、StringBuilder 与 StringBuffer 的区别、常量池。集合…...
