当前位置: 首页 > news >正文

3.21Code

基于二叉链表的二叉树最大宽度的计算

#include<iostream>#define MAXSIZE 1000using namespace std;int k=0;
int m=0; //记录层数 typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateBiTree(BiTree &T){char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new BiNode;m++; T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); 		}
}void CreateBiTree(BiTree &T,char ch){if(ch=='0')T=NULL;else{T=new BiNode;m++;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}void Traverse(BiTree T,int n[]){if(T){//k代表当前遍历到的层数! k++;n[k]++;Traverse(T->lchild,n);Traverse(T->rchild,n);k--;}
}void Width(int n[]){int max=n[1];for(int i=2;i<=m;i++)if(max<n[i])max=n[i];cout<<max<<endl;
} int main(){while(true){char ch;int n[100]={0};cin>>ch;if(ch=='0')break;BiTree T;CreateBiTree(T,ch);Traverse(T,n);Width(n);		}return 0;
} 

【思路】每创建一个结点,m++,m维护节点数。

遍历的时候,每进入一层,k++,n[k]++,k维护层数。注意在找完左右子树时,要k--,方便向上层递归

n[i]代表第i个结点对应层的结点个数

最后遍历n数组,找到最大值即可

基于二叉链表的二叉树叶子结点到根结点的路径的求解

#include<iostream>#define MAXSIZE 1000using namespace std;int maxi=0;
int m=0,n=0;typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateBiTree(BiTree &T){char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new BiNode;m++; T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); 		}
}void CreateBiTree(BiTree &T,char ch){if(ch=='0')T=NULL;else{T=new BiNode;m++;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}void Traverse(BiTree T){if(T){m++;Traverse(T->lchild);Traverse(T->rchild);m--;}
}void FindRoad(BiTree T,char path[],int pathlen){if(T){if(T->lchild==NULL && T->rchild==NULL){//叶子节点cout<<T->data;for(int i=pathlen-1;i>=0;i--) cout<<path[i];cout<<endl;}else{path[pathlen]=T->data;pathlen++;FindRoad(T->lchild,path,pathlen);FindRoad(T->rchild,path,pathlen);pathlen--; //很重要 }}
}int main(){while(true){char ch;cin>>ch;char path[100];int pathlen=0;if(ch=='0')break;BiTree T;CreateBiTree(T,ch);	Traverse(T);FindRoad(T,path,pathlen);m=0;}return 0;
} 

【思路】重点在于FindRoad函数,参数是path数组和当前path数组应储存的下标

遇到叶子结点时输出整个数组内容,否则存入当前结点名称,进入左右孩子的递归

由以上两题,注意形参是数组时,可以写成int n[ ]的形式

基于二叉链表的二叉树的遍历

#include<iostream>#define MAXSIZE 1000using namespace std;typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateBiTree(BiTree &T){char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new BiNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); 		}
}void CreateBiTree(BiTree &T,char ch){if(ch=='0')T=NULL;else{T=new BiNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}void PreTraverse(BiTree T){if(T){cout<<T->data;PreTraverse(T->lchild);PreTraverse(T->rchild);}
}void MidTraverse(BiTree T){if(T){MidTraverse(T->lchild);cout<<T->data;MidTraverse(T->rchild);}
}void LastTraverse(BiTree T){if(T){LastTraverse(T->lchild);LastTraverse(T->rchild);cout<<T->data;}
}int main(){while(true){char ch;cin>>ch;char path[100];int pathlen=0;if(ch=='0')break;BiTree T;CreateBiTree(T,ch);	PreTraverse(T);cout<<endl;MidTraverse(T);cout<<endl;LastTraverse(T);cout<<endl;}return 0;
} 

基于二叉链表的二叉树结点个数的统计

#include<iostream>#define MAXSIZE 1000using namespace std;int n0=0,n1=0,n2=0;typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateBiTree(BiTree &T){char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new BiNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); 		}
}void CreateBiTree(BiTree &T,char ch){if(ch=='0')T=NULL;else{T=new BiNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}void PreTraverse(BiTree T){if(T){if(T->lchild && T->rchild)n2++;else if(T->lchild && !T->rchild)n1++;else if(!T->lchild && T->rchild)n1++;else n0++;PreTraverse(T->lchild);PreTraverse(T->rchild);}
}void MidTraverse(BiTree T){if(T){MidTraverse(T->lchild);cout<<T->data;MidTraverse(T->rchild);}
}void LastTraverse(BiTree T){if(T){LastTraverse(T->lchild);LastTraverse(T->rchild);cout<<T->data;}
}int main(){while(true){char ch;cin>>ch;char path[100];int pathlen=0;if(ch=='0')break;BiTree T;CreateBiTree(T,ch);	PreTraverse(T);cout<<n0<<" "<<n1<<" "<<n2<<endl;n0=n1=n2=0;}return 0;
} 

基于二叉链表的二叉树高度的计算

#include<iostream>#define MAXSIZE 1000using namespace std;int maxd=0;
typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;void CreateBiTree(BiTree &T){char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new BiNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); 		}
}void CreateBiTree(BiTree &T,char ch){if(ch=='0')T=NULL;else{T=new BiNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}void PreTraverse(BiTree T,int &nowd){if(T){nowd++;maxd=max(nowd,maxd);PreTraverse(T->lchild,nowd);PreTraverse(T->rchild,nowd);nowd--;}
}void MidTraverse(BiTree T){if(T){MidTraverse(T->lchild);cout<<T->data;MidTraverse(T->rchild);}
}void LastTraverse(BiTree T){if(T){LastTraverse(T->lchild);LastTraverse(T->rchild);cout<<T->data;}
}int main(){while(true){char ch;cin>>ch;char path[100];int pathlen=0;if(ch=='0')break;BiTree T;CreateBiTree(T,ch);	int d=0;	PreTraverse(T,d);cout<<maxd<<endl;maxd=0;}return 0;
} 

【注意】最大高度应该用一个全局变量来维护,而每次遍历到的深度则用临时变量来存储和递归传参,在递归前nowd++了,在这一层最终还要nowd--,以便向上回溯!

————————————华丽的分界线————————————————

————————以下是图及应用相关习题————————————————

基于Dijsktra算法的最短路径求解

【Dijkstra算法】

#include <iostream>
#include <cstring>
#define MVNum 100
#define MaxInt 999
using namespace std;typedef struct
{char vexs[MVNum];//点集 int arcs[MVNum][MVNum];//边的邻接矩阵 int vexnum,arcnum;//点数&边数 
}AMGraph;int LocateVex(AMGraph G,char u){//存在则返回u在顶点表中的下标;否则返回-1int i;for(i=0;i<G.vexnum;++i)if(u==G.vexs[i])return i;return -1;}void InitAM(AMGraph &G)
{//初始化图 memset(G.vexs,0,sizeof(G.vexs));//初始化顶点集 for(int i=0;i<MVNum;i++)for(int j=0;j<MVNum;j++)G.arcs[i][j]=MaxInt;return;
}void CreateUDN(AMGraph &G)
{int i,j,k;  //G.vexnum++;for(i=0;i<G.vexnum;i++)cin>>G.vexs[i];for(k=0;k<G.arcnum;k++)//将边录入邻接矩阵,顺便将顶点录入 {char v1,v2;int w;cin>>v1>>v2>>w;//边的端点i=LocateVex(G,v1);j=LocateVex(G,v2);G.arcs[i][j]=w;G.arcs[j][i]=G.arcs[i][j];G.arcs[i][j]=w;G.arcs[k][k]=0;}
}void ShortestPath_DIJ(AMGraph G){ //用Dijkstra算法求有向网G的v0顶点到其余顶点的最短路径 char v0,v1;int S[MVNum];int D[MVNum];int Path[MVNum];cin>>v0>>v1;int v00=LocateVex(G,v0);int n=G.vexnum; int v;                  		//n为G中顶点的个数 for( v = 0; v<n; ++v){             	//n个顶点依次初始化 S[v] = false;                  	//S初始为空集 D[v] = G.arcs[v00][v];           	//将v0到各个终点的最短路径长度初始化 if(D[v]< MaxInt)  Path [v]=v00; //v0和v之间有弧,将v的前驱置为v0 else Path [v]=-1;               	//如果v0和v之间无弧,则将v的前驱置为-1 }//for S[v00]=true;                    	//将v0加入S D[v00]=0;     int w;  int i;               		//源点到源点的距离为0 	
/*―开始主循环,每次求得v0到某个顶点v的最短路径,将v加到S集―*/ for(i=1;i<n; ++i){               	//对其余n?1个顶点,依次进行计算 int min= MaxInt;  for(w=0;w<n; ++w) if(!S[w]&&D[w]<min)  {v=w; min=D[w];}         	//选择一条当前的最短路径,终点为v S[v]=true;                   		//将v加入S for(w=0;w<n; ++w) 	//更新从v0出发到集合V?S上所有顶点的最短路径长度 if(!S[w]&&(D[v]+G.arcs[v][w]<D[w])){ D[w]=D[v]+G.arcs[v][w];   	//更新D[w] Path [w]=v;              		//更改w的前驱为v }//if }//for   w=LocateVex(G,v1);cout<<D[w]<<endl; char road[G.vexnum];road[0]=G.vexs[w];int t=w;i=0;while(1){  i++;if(t==-1||t==v00)break;road[i]=G.vexs[Path[t]];t=Path[t];	}while(i){if(road[i])cout<<road[i]<<" ";i--;} cout<<road[0];cout<<endl;
}int main()
{	while(1){AMGraph G;InitAM(G);cin>>G.vexnum>>G.arcnum;if(G.vexnum==0&&G.arcnum==0)break;CreateUDN(G);ShortestPath_DIJ(G);}
}

相关文章:

3.21Code

基于二叉链表的二叉树最大宽度的计算 #include<iostream>#define MAXSIZE 1000using namespace std;int k0; int m0; //记录层数 typedef struct BiNode{char data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree;void CreateBiTree(BiTree &T){cha…...

学习总结2

解题思路 用bfs进行搜索,标记A罐B罐所保存的水的出现情况,当再次出现的时候停止搜索,然后用数组模拟链表进行保存路径.最后输出. 代码 #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #in…...

【LeetCode】--- 动态规划 集训(一)

目录 一、1137. 第 N 个泰波那契数1.1 题目解析1.2 状态转移方程1.3 解题代码 二、面试题 08.01. 三步问题2.1 题目解析2.2 状态转移方程2.3 解题代码 三、746. 使用最小花费爬楼梯3.1 题目解析3.2 状态转移方程3.3 解题代码 一、1137. 第 N 个泰波那契数 题目地址&#xff1a…...

【数据结构与算法】(18):树形选择排序:按照锦标赛的思想进行排序

&#x1f921;博客主页&#xff1a;Code_文晓 &#x1f970;本文专栏&#xff1a;数据结构与算法 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&…...

统计单词数

统计单词数 题目描述 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#xff0c;请你编程实现这一功能&#xff0c;具体要求是&#xff1a;给定一个单词&#xff0…...

c++pair的用法

pair简单来说就是可以存储两种类型数据的一个类&#xff0c;其内部是使用模板实现的&#xff0c;所以可以指定其内部的类型。 pair在#include <utility> pair的构造 pair<int, string> p1({ 1,"张三" });pair<int, string> p2;pair<int, str…...

石油炼化5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

石油炼化5G智能制造工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。在石油炼化行业&#xff0c;5G智能制造工厂数字孪生可视化平台的出现&#xff0c;为行业的数字化转型注入了新的活力。石油炼化行业作为传统工业的重要领域&#xff0c;面临着资源紧张、环境压力、安…...

IP代理技术革新:探索数据采集的新路径

引言&#xff1a; 随着全球化进程不断加深&#xff0c;网络数据采集在企业决策和市场分析中扮演着愈发重要的角色。然而&#xff0c;地域限制和IP封锁等问题常常给数据采集工作带来了巨大挑战。亿牛云代理服务凭借其强大的网络覆盖和真实住宅IP资源&#xff0c;成为解决这些问…...

流畅的 Python 第二版(GPT 重译)(一)

前言 计划是这样的&#xff1a;当有人使用你不理解的特性时&#xff0c;直接开枪打死他们。这比学习新东西要容易得多&#xff0c;不久之后&#xff0c;活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters&#xff0c;传奇的核心开发者&am…...

Vue+jquery+jquery.maphilight实现图片热区高亮以及点击效果

//鼠标悬浮效果 mounted() {this.setCurrentTask(0); //对于id为mapAll的热区图&#xff0c;设置鼠标放置在上面有一个颜色 fillColor填充颜色 strokeColor边框颜色 strokeWidth边框宽度 fillOpacity 是设置热区填充颜色的不透明度的属性。 alwaysOn:true 保持常量$(function(…...

靠谱!朋友圈一键转发和自动转发好友朋友圈

微信朋友圈在生活和工作中扮演着重要的社交和信息传播角色。尤其是对于一些企业来说&#xff0c;朋友圈是不可或缺的推广渠道。 今天就给大家分享一个能够实现一键转发和自动转发好友朋友圈的工具——微信管理系统&#xff0c;让大家都能有效的管理朋友圈。 1、定时发圈&…...

线性顺序表算法库

list.cpp 具体函数实现 #include <stdio.h> #include "list.h" #include <malloc.h>/************************************************** ①函数名: CreateList 功 能: 用数组构建顺序表 参 数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用…...

java分割等和子集(力扣Leetcode416)

分割等和子集 力扣原题链接 给你一个只包含正整数的非空数组nums。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] …...

383. 赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 func canConstruct(ransomNote …...

【二】【单片机】有关独立按键的实验

自定义延时函数Delay 分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中&#xff0c;直接使用。 //Delay.c void Delay(unsigned int xms) //11.0592MHz {while(xms--){unsigned char i, j;i 2;j 199;do{while (--j);}…...

AJAX踩坑指南(知识点补充)

JWT JSON Web Token是目前最为流行的跨域认证解决方案 如何获取&#xff1a;在使用JWT身份验证中&#xff0c;当用户使用其凭据成功登录时&#xff0c;将返回JSON Web Token(令牌&#xff09; Token本质就是一个包含了信息的字符串 如何获取Token:登录成功之后&#xff0c;服务…...

备战蓝桥杯Day29 - 拼接最大数字问题

问题描述 有n个非负整数&#xff0c;将其按照字符串拼接的方式拼接为一个整数如何拼接可以使得得到的整数最大? 例: 32,94,128,1286,6,71可以拼接除的最大整数为 94716321286128。 问题思路 1.比较两个字符串的第一个数字&#xff0c;数值大的在前面&#xff0c;数值小的在…...

基于springboot的mysql实现读写分离

前言: 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的手段&#xff1f;常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等&#xff0c;在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读…...

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】

目录&#xff1a; 每篇前言&#xff1a;1.使用分布式爬取豆瓣电影信息&#xff08;1&#xff09;settings.py文件中的配置&#xff1a;&#xff08;2&#xff09;spider文件的更改&#xff1a;&#xff08;3&#xff09;items.py文件&#xff08;两个项目一致&#xff01;&…...

提升效率,稳定可靠:亚信安慧AntDB的企业价值

亚信安慧AntDB分布式数据库凭借平滑扩展、高可用性和低成本三大核心优势&#xff0c;在业界获得了极高的评价和认可。这些优点不仅为AntDB提供了巨大的市场发展潜力&#xff0c;也使其成为众多企业在数据管理上的首选解决方案。 AntDB的平滑扩展特性极大地提升了企业的灵活性和…...

从ChatGLM到Qwen,不同架构大模型的监控差异图谱:8大维度对比分析(含GPU/TPU/NPU全栈指标映射表)

第一章&#xff1a;大模型工程化运维监控体系建设的范式演进 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化运维监控已从传统AI服务的“可观测性补丁”阶段&#xff0c;演进为覆盖训练、推理、评估、反馈全生命周期的“闭环治理范式”。这一转变由模型规模跃升、…...

5个简单步骤掌握Inter字体:从安装到高级应用的全方位指南

5个简单步骤掌握Inter字体&#xff1a;从安装到高级应用的全方位指南 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter 在当今数字设计领域&#xff0c;选择合适的屏幕字体对于提升用户体验至关重要。Inter字体作为一款…...

暗黑破坏神2存档编辑器的终极指南:打造你的完美角色

暗黑破坏神2存档编辑器的终极指南&#xff1a;打造你的完美角色 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾为暗黑破坏神2中某个角色的属性分配不当而后悔&#xff1f;是否想体验不同装备组合却不想花费数小时刷装备…...

如何通过wireshark抓取802.11无线网络的数据包

原文链接&#xff1a;https://wiki.wireshark.org/CaptureSetup/WLAN全文总结 本文围绕IEEE 802.11&#xff08;WLAN&#xff09;无线网络抓包环境搭建展开详细说明&#xff0c;核心讲解了在使用Wireshark、TShark等工具抓取无线流量时&#xff0c;不同抓包需求对应的配置方式、…...

域环境 vs 工作组:Windows Server 2008用net use挂载共享的权限陷阱大全

域环境与工作组混合架构下的共享挂载权限深度解析 在企业IT基础设施中&#xff0c;Windows Server 2008仍广泛存在于各类生产环境。当管理员需要跨域环境和工作组混合架构管理共享资源时&#xff0c;net use命令挂载网络共享的权限问题往往成为最隐蔽的"暗礁"。本文…...

用WPF和OpenCVSharp从零搭建一个Vision Master风格的视觉软件(附完整源码)

从零构建工业级视觉处理软件&#xff1a;WPFOpenCVSharp实战指南 工业视觉检测系统正逐渐成为智能制造的核心组件&#xff0c;但市面上成熟的商业软件往往价格昂贵且难以定制。作为一名长期从事工业自动化开发的工程师&#xff0c;我经常遇到需要快速开发定制化视觉解决方案的场…...

Dart异步编程中runZonedGuarded的异常捕获实战指南

1. 为什么你需要关注Dart异步异常捕获&#xff1f; 在移动应用和后台服务开发中&#xff0c;异步操作无处不在。想象你正在开发一个Flutter应用&#xff0c;当用户点击按钮触发网络请求时&#xff0c;如果服务器突然返回错误&#xff0c;而你的代码没有妥善处理这个异常&#x…...

在Blender中实现3MF格式的终极导入导出:5分钟快速上手指南

在Blender中实现3MF格式的终极导入导出&#xff1a;5分钟快速上手指南 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中无缝处理3D打印专用的3MF文件格式吗…...

GCC源码深度分析:从设计哲学到工程实践

一、设计原理与哲学1.1 三段式架构的哲学基础GCC&#xff08;GNU Compiler Collection&#xff09;的设计核心是三段式架构&#xff0c;这一设计哲学源于编译器理论中的经典分离原则。GCC将编译过程清晰地划分为前端、中端和后端三个逻辑部分&#xff0c;每个部分专注于特定的任…...

强化学习(7)--时序差分方法

说明&#xff1a;本系列文章是我在学习了西湖大学赵世钰老师的《Mathematical Foundations of Reinforcement Learning》一书后的学习笔记&#xff0c;在B站上有赵老师的完整课程视频。 课程视频链接 PDF教材链接 本文代码链接 一、TD算法的基本形式&#xff08;TD0&#xf…...