威县建设局网站搭建网站平台有前途吗

web/2025/10/4 3:45:55/文章来源:
威县建设局网站,搭建网站平台有前途吗,销售网站建设,网站设计制作行业排行在上堆中已经介绍了什么是二叉树#xff0c;所以这里直接写二叉树实现。 1、二叉树的构建 二叉树的构建第一步肯定是初始化#xff0c;也就是构建这棵树#xff0c;这里是利用前序遍历构建的#xff0c;因为这里是利用链表形式创建的二叉树#xff0c;所以这里就是和之前…在上堆中已经介绍了什么是二叉树所以这里直接写二叉树实现。 1、二叉树的构建 二叉树的构建第一步肯定是初始化也就是构建这棵树这里是利用前序遍历构建的因为这里是利用链表形式创建的二叉树所以这里就是和之前文章一样先是申请地址的函数紧接着就是递归去申请空间因为构建的树是字符型所以这里在#号停下构建并且递归返回销毁也是递归销毁因为左节点和右节点最后肯定为空所以可以直接判断这两个节点代码如下 //申请地址 BTNode* BuyNode(BTDataType* a) {BTNode* newnode (BTNode*)malloc(sizeof(BTNode));if (newnode NULL){perror(malloc fail);return NULL;}newnode-data *a;newnode-left NULL;newnode-right NULL;return newnode; }// 通过前序遍历的数组ABD##E#H##CF##G##构建二叉树 BTNode* BinaryTreeCreate(BTDataType* a,int* pi) {if (a[*pi] #){(*pi);return NULL;}BTNode* root BuyNode(a[*pi]);(*pi);root-left BinaryTreeCreate(a, pi);root-right BinaryTreeCreate(a, pi);return root; }// 二叉树销毁 void BinaryTreeDestory(BTNode* root) {if (root NULL)return;BinaryTreeDestory(root-left);BinaryTreeDestory(root-right);free(root); } 2、二叉树的前序遍历 这个前序遍历就是按照根左节点右节点的形式去打印数据当判断到当前地址为空时也就是说这个节点到头了就可以直接返回接着递归了所以这种就是打印前序遍历的代码如下。 void BinaryTreePrevOrder(BTNode* root) {if (root NULL){printf(N );return ;}printf(%c , root-data);BinaryTreePrevOrder(root-left); BinaryTreePrevOrder(root-right); } 3、二叉树的中序遍历 这个和前序遍历没多大区别不同的就是打印位置变了如下代码就是先遍历左节点紧接着就是在左节点遍历完返回打印一直到根节点最后咋递归遍历右节点打印。 void BinaryTreeInOrder(BTNode* root) {if (root NULL){printf(N );return;}BinaryTreeInOrder(root-left);printf(%c , root-data);BinaryTreeInOrder(root-right); } 4、二叉树的后续遍历 后续遍历说白了就是先遍历左节点然后是右节点最后是根节点代码如下。 void BinaryTreePostOrder(BTNode* root) {if (root NULL){printf(N );return;}BinaryTreePostOrder(root-left);BinaryTreePostOrder(root-right);printf(%c , root-data); } 5、二叉树的层序遍历 这个就不是利用递归了他是利用队列的先进先出的特性进行遍历的就是根节点出队的时候带进左节点和右节点然后左节点出的时候带入左节点的左节点和右节点这样循环下去就可以遍历整个树代码如下队列代码文章末会附上。 void BinaryTreeLevelOrder(BTNode* root) {Queue q;QueueInit(q);if (root)QueuePush(q, root);int levelSize 1;while (!QueueEmpty(q)){// 一层一层出while (levelSize--){BTNode* front QueueFront(q);QueuePop(q);printf(%c , front-data);if (front-left)QueuePush(q, front-left);if (front-right)QueuePush(q, front-right);}printf(\n);levelSize QueueSize(q);}printf(\n);QueueDestroy(q); } 6、二叉树的一些小功能 如二叉树的节点个数这个就可以直接遍历到空节点然后返回的时候1就可以判断出来了。 二叉树的叶子节点个数这个也是遍历到最后一层但是他的返回就是只有为叶子时才返回1然后左右遍历相加就可以得出。 这个就是遍历左右两边在返回时计算自己这边多高然后谁高返回谁。 查找第k层的节点数这个就是递归的--k当k等于1时就到了这层然后去计算这层有几个节点数然后左右两边一加就可以得出。 查找某个值这里就是去遍历然后找到了这个值后记录这个值然后进行返回这个值的地址。 判断这个树是否是完全二叉树完全二叉树的概念在堆里面写了他就是利用层序遍历会带出后续节点的特性去判断当是完全二叉树时不会出现中间是空的情况。 // 二叉树节点个数 int BinaryTreeSize(BTNode* root) {if (root NULL)return 0;return BinaryTreeSize(root-left) BinaryTreeSize(root-right) 1; }// 二叉树叶子节点个数 int BinaryTreeLeafSize(BTNode* root) {if (rootNULL)return 0;if (root-left NULL root-right NULL){return 1;}return BinaryTreeLeafSize(root-left) BinaryTreeLeafSize(root-right); }//二叉树高度 int BinaryTreeHigh(BTNode* root) {if (root NULL){return 0;}int LeftHigh BinaryTreeHigh(root-left);int RightHigh BinaryTreeHigh(root-right);return LeftHigh RightHigh ? LeftHigh 1 : RightHigh 1; }// 二叉树第k层节点个数 int BinaryTreeLevelKSize(BTNode* root, int k) {assert(k 0);if (root NULL){return 0;}if (k 1){return 1;}return BinaryTreeLevelKSize(root-left, k - 1) BinaryTreeLevelKSize(root-right, k - 1); }// 二叉树查找值为x的节点 BTNode* BinaryTreeFind(BTNode* root, BTDataType x) {if (root NULL){return NULL;}if (root-data x){return root;}BTNode* ret1BinaryTreeFind(root-left,x);if (ret1)return ret1;BTNode* ret2BinaryTreeFind(root-right,x);if (ret2)return ret2;return NULL; }// 判断二叉树是否是完全二叉树 int BinaryTreeComplete(BTNode* root) {Queue q;QueueInit(q);if (root)QueuePush(q, root);int levelSize 1;while (!QueueEmpty(q)){BTNode* front QueueFront(q);QueuePop(q);if (front NULL)break;QueuePush(q, front-left);QueuePush(q, front-right);}// 前面遇到空以后后面还有非空就不是完全二叉树while (!QueueEmpty(q)){BTNode* front QueueFront(q);QueuePop(q);if (front){QueueDestroy(q);return false;}}QueueDestroy(q);return true; } 7、测试代码、运行结果以及全部代码 这里测试是吧上文所有案例都带上了。 test.c #define _CRT_SECURE_NO_WARNINGS 1 #include BT.h #include QL.hint main() {char arr[] { ABD##E#H##CF##G## };int pi 0;BTNode* root BinaryTreeCreate(arr, pi);BinaryTreePrevOrder(root);printf(\n);BinaryTreeInOrder(root);printf(\n);BinaryTreePostOrder(root);printf(\n);BinaryTreeLevelOrder(root);printf(\n);printf(%d\n, BinaryTreeSize(root));printf(%d\n, BinaryTreeLeafSize(root));printf(%d\n, BinaryTreeHigh(root));printf(%d\n, BinaryTreeLevelKSize(root,3));printf(%d\n, BinaryTreeLevelKSize(root,4));BTNode* root1 BinaryTreeFind(root, E);printf(%c\n,root1-data );printf(%d\n, BinaryTreeComplete(root));BinaryTreeDestory(root);root NULL;return 0; } BT.c #define _CRT_SECURE_NO_WARNINGS 1 #include BT.h #include QL.h//申请地址 BTNode* BuyNode(BTDataType* a) {BTNode* newnode (BTNode*)malloc(sizeof(BTNode));if (newnode NULL){perror(malloc fail);return NULL;}newnode-data *a;newnode-left NULL;newnode-right NULL;return newnode; }// 通过前序遍历的数组ABD##E#H##CF##G##构建二叉树 BTNode* BinaryTreeCreate(BTDataType* a,int* pi) {if (a[*pi] #){(*pi);return NULL;}BTNode* root BuyNode(a[*pi]);(*pi);root-left BinaryTreeCreate(a, pi);root-right BinaryTreeCreate(a, pi);return root; }// 二叉树销毁 void BinaryTreeDestory(BTNode* root) {if (root NULL)return;BinaryTreeDestory(root-left);BinaryTreeDestory(root-right);free(root); }// 二叉树节点个数 int BinaryTreeSize(BTNode* root) {if (root NULL)return 0;return BinaryTreeSize(root-left) BinaryTreeSize(root-right) 1; }// 二叉树叶子节点个数 int BinaryTreeLeafSize(BTNode* root) {if (rootNULL)return 0;if (root-left NULL root-right NULL){return 1;}return BinaryTreeLeafSize(root-left) BinaryTreeLeafSize(root-right); }//二叉树高度 int BinaryTreeHigh(BTNode* root) {if (root NULL){return 0;}int LeftHigh BinaryTreeHigh(root-left);int RightHigh BinaryTreeHigh(root-right);return LeftHigh RightHigh ? LeftHigh 1 : RightHigh 1; }// 二叉树第k层节点个数 int BinaryTreeLevelKSize(BTNode* root, int k) {assert(k 0);if (root NULL){return 0;}if (k 1){return 1;}return BinaryTreeLevelKSize(root-left, k - 1) BinaryTreeLevelKSize(root-right, k - 1); }// 二叉树查找值为x的节点 BTNode* BinaryTreeFind(BTNode* root, BTDataType x) {if (root NULL){return NULL;}if (root-data x){return root;}BTNode* ret1BinaryTreeFind(root-left,x);if (ret1)return ret1;BTNode* ret2BinaryTreeFind(root-right,x);if (ret2)return ret2;return NULL; }// 二叉树前序遍历 void BinaryTreePrevOrder(BTNode* root) {if (root NULL){printf(N );return ;}printf(%c , root-data);BinaryTreePrevOrder(root-left); BinaryTreePrevOrder(root-right); }// 二叉树中序遍历 void BinaryTreeInOrder(BTNode* root) {if (root NULL){printf(N );return;}BinaryTreeInOrder(root-left);printf(%c , root-data);BinaryTreeInOrder(root-right); }// 二叉树后序遍历 void BinaryTreePostOrder(BTNode* root) {if (root NULL){printf(N );return;}BinaryTreePostOrder(root-left);BinaryTreePostOrder(root-right);printf(%c , root-data); } // 层序遍历 void BinaryTreeLevelOrder(BTNode* root) {Queue q;QueueInit(q);if (root)QueuePush(q, root);int levelSize 1;while (!QueueEmpty(q)){// 一层一层出while (levelSize--){BTNode* front QueueFront(q);QueuePop(q);printf(%c , front-data);if (front-left)QueuePush(q, front-left);if (front-right)QueuePush(q, front-right);}printf(\n);levelSize QueueSize(q);}printf(\n);QueueDestroy(q); }// 判断二叉树是否是完全二叉树 int BinaryTreeComplete(BTNode* root) {Queue q;QueueInit(q);if (root)QueuePush(q, root);int levelSize 1;while (!QueueEmpty(q)){BTNode* front QueueFront(q);QueuePop(q);if (front NULL)break;QueuePush(q, front-left);QueuePush(q, front-right);}// 前面遇到空以后后面还有非空就不是完全二叉树while (!QueueEmpty(q)){BTNode* front QueueFront(q);QueuePop(q);if (front){QueueDestroy(q);return false;}}QueueDestroy(q);return true; } BT.h #pragma once #include stdio.h #include stdlib.h #include stdbool.h #include assert.h #include string.h typedef char BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; //申请地址 BTNode* BuyNode(BTDataType* a); // 通过前序遍历的数组ABD##E#H##CF##G##构建二叉树 BTNode* BinaryTreeCreate(BTDataType* a, int* pi); // 二叉树销毁 void BinaryTreeDestory(BTNode* root); // 二叉树节点个数 int BinaryTreeSize(BTNode* root); // 二叉树叶子节点个数 int BinaryTreeLeafSize(BTNode* root); // 二叉树第k层节点个数 int BinaryTreeLevelKSize(BTNode* root, int k); // 二叉树查找值为x的节点 BTNode* BinaryTreeFind(BTNode* root, BTDataType x); // 二叉树前序遍历 void BinaryTreePrevOrder(BTNode* root); // 二叉树中序遍历 void BinaryTreeInOrder(BTNode* root); // 二叉树后序遍历 void BinaryTreePostOrder(BTNode* root); // 层序遍历 void BinaryTreeLevelOrder(BTNode* root); // 判断二叉树是否是完全二叉树 int BinaryTreeComplete(BTNode* root); //二叉树的高度 int BinaryTreeHigh(BTNode* root); QL.c #define _CRT_SECURE_NO_WARNINGS 1 #include QL.h// 初始化队列 void QueueInit(Queue* pq) {assert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0; }// 队尾入队列 void QueuePush(Queue* pq, QDataType data) {assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);return;}newnode-data data;newnode-next NULL;if (pq-ptail NULL){assert(pq-pheadNULL);pq-phead pq-ptail newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}pq-size; }// 队头出队列 void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));if (pq-phead-next NULL){free(pq-phead);pq-phead pq-ptail NULL;}else{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }// 获取队列头部元素 QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-phead-data; }// 获取队列队尾元素 QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq-ptail-data; }// 获取队列中有效元素个数 int QueueSize(Queue* pq) {assert(pq);return pq-size; }// 检测队列是否为空如果为空返回非零结果如果非空返回0 bool QueueEmpty(Queue* pq) {assert(pq);return pq-size0; }// 销毁队列 void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-phead;while (cur){QNode* next cur-next;free(cur);cur next;}pq-phead pq-ptail NULL;pq-size 0; } QL.h #pragma once #include stdio.h #include stdlib.h #include assert.h #include stdbool.h typedef int QDataType; // 链式结构表示队列 typedef struct QueueNode {struct QueueNode* next;QDataType data;}QNode;// 队列的结构 typedef struct Queue {QNode* phead;QNode* ptail;int size; }Queue;// 初始化队列 void QueueInit(Queue* pq); // 队尾入队列 void QueuePush(Queue* pq, QDataType data); // 队头出队列 void QueuePop(Queue* pq); // 获取队列头部元素 QDataType QueueFront(Queue* pq); // 获取队列队尾元素 QDataType QueueBack(Queue* pq); // 获取队列中有效元素个数 int QueueSize(Queue* pq); // 检测队列是否为空如果为空返回非零结果如果非空返回0 bool QueueEmpty(Queue* pq); // 销毁队列 void QueueDestroy(Queue* pq);

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

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

相关文章

网站建设河南百度站长网站规则改版

状态更改检测,也就是检测应用程序对状态值的改变,这样才会相应地更新 UI。 (#MVC模式中模型Model的改变会更新View界面UI,这点类似后端的ORM,对象状态更改通过ORM框架自动变更相应数据表值) 变更检测是前…

创建网站的流程有哪些零基础怎么学视频剪辑

出差回来,发现太多事需要处理现在每个项目都在Delay。且没有一个人是主动汇报项目的。这是非常不正常的现象。感觉有点累转载于:https://www.cnblogs.com/boriscao/archive/2005/09/03/229368.html

广州教育网站设计公司友情链接怎么连

本来以为以前的差不多够用了。呵呵,看到很多高手用高技巧,心痒痒的觉得我自己还可以提升啊。。哈哈哈。 这个实践起来之后,,SED,AWK也得深化一下,,,SHELL和PYTHON,作运维的两样都不能…

wordpress一行太宽了十堰seo按天计费

一、起因 1、需求: 由于业务需求在页面一次性展示较多数据,不低于上千,但是每条数据涉及样式较多,数据渲染过多就会导致页面卡顿 2、满足: 大量数据加载;表格功能:列显隐、列顺序调整、固定、筛…

中企动力做的网站升级收费广西省住房和城乡建设厅官方网站

作为青岛市的主干道之一,山东路的拥堵状况一直让人头疼。近日,因为一种交通组织优化方案的实施,山东路和延吉路的通行率提高了近50%。而研发这种智能管控系统的正是位于青岛高新区的青岛智能产业技术研究院。截止今年5月份,青岛智…

php快速建站系统芜湖网站推广

最近开发WAP网站时,最讨厌的就是back键,会造成些麻烦事。不过,问题总有办法解决。 有些页面,点击back键回退会加载缓存,这不是想要的,所以希望能够控制该页面不缓存,每次请求都需要从服务器获取…

重庆网站备案规则wordpress页面怎么切换

引言:陌瑾出品,争做精品!大家好,我是你们的老朋友,陌瑾。和平精英作为当下比较热门的一款PVP即时战斗手游,在6月17日,海岛2.0版本也重装上阵,此次地图更新是和平精英游戏上线以来第1…

电子商务网站软件平台百度一下首页极简版

目录 一、算法原理二、代码实现三、结果展示四、相关连接Open3D (C++) 点云投影至主成分空间由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 p r o j

做网站开发用哪门语言凡科建站代理入口

5G是什么?5G,其中字母G代表generation(代、际)。即第五代移动电话行动通信标准,也称第五代移动通信技术。5G的应用范围很广,大致可以包括以下几个方面:1、5G综合产业链分析2、5G与物联网3、5G与车联网4、5G与无线医疗5G对服务器的要求“云端…

基于阿里云的电商网站建设男女明星直接做的视频网站

总之,抖音招聘是一种新颖、高效的招聘方式,它可以为公司带来更大的曝光度和吸引力,帮助公司吸引更多优秀的人才。通过抖音直播招聘报白,企业或者人力资源公司可以利用抖音的短视频流量红利,触达到每天超过8亿的活跃用户…

女装网站建设规划书怎么写商城全网推广运营公司

目录 透传 Attributes Attributes 继承​ 对 class 和 style 的合并 v-on 监听器继承 深层组件继承 禁用 Attributes 继承 多根节点的 Attributes 继承 vue2 $attrs 和 $listeners $attrs 概念说明 $attrs 案例 $listeners 概念说明 $listeners案例 vue3 $attr…

智能网站推广优化福州做网站建设

总览 MineCraft是一个很好的例子,说明何时堆外内存确实可以提供帮助。 关键要求是: 保留的数据大部分是一个简单的数据结构(在我的世界的情况下,它的很多字节[]) 堆外内存的使用可以隐藏在抽象中。 考试 我使用以下测…

建设网站的工作流程价值30万的网站建设

prototype 属性的作用 JavaScript 规定,每个函数都有一个prototype属性,指向一个对象。 function f() {} typeof f.prototype // "object" ​ 上面代码中,函数f默认具有prototype属性,指向一个对象。 对于普通函数来…

百盛联合建设集团网站成功的软文推广

目录 一、ELK 简介 1.1 组件说明 1.2 为什么要使用ELK 1.3 完整日志系统的基本特征 1.4 ELK工作原理 二、Elasticsearch的介绍 2.1 Elasticsearch的核心: 三、Logstash 3.1 Logstash简介 四、Kibana 五、部署ELK日志分析系统 5.1 服务器配置 5.2 ELK Elasticse…

网站 成功因素南京十大广告公司

一、根据二叉树创建字符串 思路:在正常前序递归遍历的基础上,单独加上一个考虑到右子树为空的情况,如下:其结果为 1(2(4(5)(6)))&…

杭州电商网站建设公司青海省建设厅网站

不知道大家在写代码的时候,摸不摸鱼,是不是时不时得打开一下微博,看看今天发生了什么大事,又有谁塌房,而你没有及时赶上。 为此,我决定开发一个vscode插件,来查看微博热搜 插件名称&#xff1…

坪山网站建设渠道不备案如何架设网站

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…

佛山 网站建设安装wordpress主题失败

文章目录 前言一、鼠标点击的角度测量二、二维码条形码识别 前言 一、鼠标点击的角度测量 首先导入一个带有角度的照片 然后下面的代码注册了一个鼠标按下的回调函数, 还有一个点的数列,鼠标事件为按下的时候就记录点,并画出点,…

济南网站优化收费怎么做网站demo

爆破音 true [t],发真实的 t。 单词的开始处重读音节的开始处,且前面没有跟着清辅音 [s] held 住不发声 叫法很多,声门塞音、吞音、喉塞(s)音、stop [t],held [t],不爆破的 [t]。 发音的口…

wordpress问答模块怎么做网络推广优化

目录 一、动态语言 二、创建C#dll 1.VS中创建一个C#语言的库工程 2.添加UnityEngine.dll的依赖 3.编写代码,生成dll 三、Unity使用dll 一、动态语言 计算机编程语言可以根据它们如何将源代码转换为可以执行的代码来分类为静态语言和动态语言。 静态语言&…