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

宝塔Linux面板清理建设的网站建站申请

宝塔Linux面板清理建设的网站,建站申请,集团简介ppt优秀范例,网站开发的可行性分析问题描述#xff1a; 给你一个二叉树#xff0c;请你返回其按 层序遍历 得到的节点值。 #xff08;即逐层地#xff0c;从左到右访问所有节点#xff09;。 示例#xff1a; 二叉树#xff1a;[3,9,20,null,null,15,7] 返回其层次遍历结果#xff1a; [ [3], [9,…问题描述 给你一个二叉树请你返回其按 层序遍历 得到的节点值。 即逐层地从左到右访问所有节点。 示例 二叉树[3,9,20,null,null,15,7] 返回其层次遍历结果 [ [3], [9,20], [15,7] ] 通过 来源力扣LeetCode 二叉树的层序遍历 目录 1.非递归用循环队列 2.递归实现层次遍历 在栈与队列匹配问题都是栈的强项中提到「递归的实现就是每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中」然后递归返回的时候从栈顶弹出上一次递归的各项参数所以这就是递归为什么可以返回上一层位置的原因。 知识前提循环队列二叉树的基本运算 非递归用循环队列 //思路 进行层次遍历时构建一个辅助队列先将二叉树根节点入队然后出队访问出队结点若它有左子树将左子树根节点入队然后出队访问出队结点…右子树也同样如此循环往复直到队列为空 1.构建好辅助队列Q和二叉树T 2.首先将二叉树的T根节点入队列 3.进入while循环退出条件 队列为空 4.循环内部首先将队列中的队首元素出栈并且输出他的值 若队首元素刚刚出队的元素有左子树将其左子树入队 若队首元素刚刚出队的元素有右子树将其右子树入队 详细代码可直接运行 补充如何让输出为一层一行 方法说起来很简单只要仔细想应该都能想出这种方法来。 定义两个变量curLevelCount和nextLevelCount来分别保存当前层和下一层的结点数。 显然curLevelCount的初始值为1因为只有一个根结点而nextLevelCount由于未知故置为0. 思路 1.输出一行一行的与之前输出为一行的代码大体相似 2.构建好辅助队列Q和二叉树T 3.再定义两个变量curLevelCount用于记录当前层次结点个数nextLevelCount用于记录当前层次的下一层结点的个数 4.将二叉树的根节点入栈同时curLevelCount1nextLevelCount0 5.进入while循环退出条件 队列为空 6.循环内部首先将队列中的队首元素出栈并且输出他的值与此同时将curLevelCount–) 若队首元素刚刚出队的元素有左子树将其左子树入队.(与此同时将nextLevelCount); 若队首元素刚刚出队的元素有右子树将其右子树入队.与此同时将nextLevelCount); 若curLevelCount减到零输出一个换行符将nextLevelCount赋值给curLevelCount nextLevelCount0 代码非递归用循环队列 #includestdio.htypedef int Status; #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OK 1 #includemalloc.h #includestdlib.h #includestdio.h #includebits/stdc.h typedef char TElemType; typedef int status; typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree; typedef BiTree ElemType; typedef BiTree QElemType; //----------循环队列 --顺序存储结构----------------------- #define MAXQSIZE 100 // 最大队列长度1 typedef struct {ElemType *base; // 初始化的动态分配存储空间int front; // 头指针若队列不空指向队列头元素int rear; // 尾指针若队列不空指向队列尾元素的下一个位置 } SqQueue; void InitQueue(SqQueue Q) { // 构造一个空队列QQ.base (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));if(!Q.base) // 存储分配失败exit(0);Q.front Q.rear 0; } void DestroyQueue(SqQueue Q) { // 销毁队列QQ不再存在if(Q.base)free(Q.base);Q.base NULL;Q.front Q.rear 0; } int QueueLength(SqQueue Q) {return ((Q.rear-Q.frontMAXQSIZE)%MAXQSIZE); } Status EnQueue(SqQueue Q, QElemType e) { // 插入元素e为Q的新的队尾元素if((Q.rear 1) % MAXQSIZE Q.front) // 队列满return ERROR;Q.base[Q.rear] e;Q.rear (Q.rear 1) % MAXQSIZE;return OK; } Status DeQueue(SqQueue Q, QElemType e) { // 若队列不空则删除Q的队头元素用e返回其值// 并返回OK否则返回ERRORif(Q.front Q.rear) // 队列空return ERROR;e Q.base[Q.front];Q.front (Q.front 1) % MAXQSIZE;return OK; } Status GetHead(SqQueue Q, QElemType e) { // 若队列不空则用e返回Q的队头元素并返回OK// 否则返回ERRORif(Q.front Q.rear) // 队列空return ERROR;e Q.base[Q.front];return OK; } Status QueueEmpty(SqQueue Q) {// 若队列Q为空队列则返回TRUE否则返回FALSEif(Q.front Q.rear) // 队列空的标志return TRUE;elsereturn FALSE; } void traverse(SqQueue Q) {int x;xQ.front;int numQueueLength(Q);for(int i0;inum;i){printf(%d--,Q.base[(x)%MAXQSIZE]);} }void CreateBiTree(BiTree T)//二叉树的先序创建 {TElemType ch;scanf(%c,ch);if(ch#)TNULL;else {T(BiNode*)malloc(sizeof(BiNode));if(!T)exit(-1);T-datach;CreateBiTree(T-lchild);CreateBiTree(T-rchild);} }void DestroyBiTree(BiTree T)//二叉树的销毁算法 {if(TNULL)exit(-1);else{DestroyBiTree(T-lchild);DestroyBiTree(T-rchild);free(T);} }int preorderTraverse(BiTree T)//二叉树的先序递归遍历算法 {if(TNULL)return 0;else {printf(%c ,T-data);preorderTraverse(T-lchild);preorderTraverse(T-rchild);}} int InorderTraverse(BiTree T)//二叉树的中序递归遍历算法 {if(TNULL)return 0;else {InorderTraverse(T-lchild);printf(%c ,T-data);InorderTraverse(T-rchild);}}int PostorderTraverse(BiTree T)//二叉树的后序递归遍历算法 {if(TNULL)return 0;else {PostorderTraverse(T-lchild);PostorderTraverse(T-rchild);printf(%c ,T-data);}}void BiTree_level_traversal1(BiTree T)//按层输出一行 {SqQueue Q;InitQueue(Q);EnQueue(Q,T);BiTree temp;while(!QueueEmpty(Q)){DeQueue(Q, temp);printf(%c ,temp-data);if(temp-lchild!NULL)EnQueue(Q,temp-lchild);if(temp-rchild!NULL)EnQueue(Q,temp-rchild);}} void BiTree_level_traversal(BiTree T)// 层次遍历输入一层一层的 {SqQueue Q;InitQueue(Q);EnQueue(Q,T);BiTree temp;int curLevelCount1,nextLevelCount0; while(!QueueEmpty(Q)){DeQueue(Q, temp);printf(%c ,temp-data);curLevelCount--;if(temp-lchild!NULL){EnQueue(Q,temp-lchild);nextLevelCount;}if(temp-rchild!NULL){EnQueue(Q,temp-rchild);nextLevelCount;}if(curLevelCount0){printf(\n); curLevelCount nextLevelCount;nextLevelCount0;}}} int main() {BiTree T;printf(创建树输入树T的先序序列(其中使用#代表空节点)\n);CreateBiTree(T);printf(先序遍历算法);preorderTraverse(T);printf(\n中序遍历算法);InorderTraverse(T);printf(\n后序遍历算法);PostorderTraverse(T);printf(\n遍历结果为\n);BiTree_level_traversal1(T);printf(\n一层一层的输出\n); BiTree_level_traversal(T); }递归实现层次遍历 思路 1.先利用BiTree_height1(BiTree T)求二叉树高度算法求得高度 2.levelOrder( BiTree T)层次遍历递归算法这个函数仅一个for循环用for将二叉树一层一层的输出每一层输出完再输出一个换行符。 3.printNodeAtLevel(BiTree T,int level)真正的递归遍历输出函数。 若level0输入此时的T-data; int BiTree_height1(BiTree T)//求树的深度算法1 {if(TNULL)return 0;else{if(BiTree_height1(T-lchild)BiTree_height1(T-rchild))return 1BiTree_height1(T-lchild);elsereturn 1BiTree_height1(T-rchild);}} void printNodeAtLevel(BiTree T,int level) { if(TNULL||level0) return; if(level0) { printf(%c ,T-data);return; } // 左子树的 level - 1 级 printNodeAtLevel(T-lchild,level-1); // 右子树的 level - 1 级 printNodeAtLevel(T-rchild,level-1); }void levelOrder(const BiTree T) {if(TNULL)return;int totalLevel BiTree_height1(T);for(int i 0; i totalLevel; i){printNodeAtLevel(T, i);printf(\n);//打印完一层换行} } 代码递归实现全部代码 #includestdio.h #includebits/stdc.h typedef char TElemType; typedef int status; typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree; void CreateBiTree(BiTree T)//二叉树的先序创建 {TElemType ch;scanf(%c,ch);if(ch#)TNULL;else {T(BiNode*)malloc(sizeof(BiNode));if(!T)exit(-1);T-datach;CreateBiTree(T-lchild);CreateBiTree(T-rchild);} }void DestroyBiTree(BiTree T)//二叉树的销毁算法 {if(TNULL)exit(-1);else{DestroyBiTree(T-lchild);DestroyBiTree(T-rchild);free(T);} }int preorderTraverse(BiTree T)//二叉树的先序递归遍历算法 {if(TNULL)return 0;else {printf(%c ,T-data);preorderTraverse(T-lchild);preorderTraverse(T-rchild);}} int InorderTraverse(BiTree T)//二叉树的中序递归遍历算法 {if(TNULL)return 0;else {InorderTraverse(T-lchild);printf(%c ,T-data);InorderTraverse(T-rchild);}}int PostorderTraverse(BiTree T)//二叉树的后序递归遍历算法 {if(TNULL)return 0;else {PostorderTraverse(T-lchild);PostorderTraverse(T-rchild);printf(%c ,T-data);}}int BiTree_height1(BiTree T)//求树的深度算法1 {if(TNULL)return 0;else{if(BiTree_height1(T-lchild)BiTree_height1(T-rchild))return 1BiTree_height1(T-lchild);elsereturn 1BiTree_height1(T-rchild);}} void printNodeAtLevel(BiTree T,int level) { if(TNULL||level0) return; if(level0) { printf(%c ,T-data);return; } // 左子树的 level - 1 级 printNodeAtLevel(T-lchild,level-1); // 右子树的 level - 1 级 printNodeAtLevel(T-rchild,level-1); }void levelOrder(const BiTree T) {if(TNULL)return;int totalLevel BiTree_height1(T);for(int i 0; i totalLevel; i){printNodeAtLevel(T, i);printf(\n);//打印完一层换行} } int main() {BiTree T;printf(创建树输入树T的先序序列(其中使用#代表空节点)\n);CreateBiTree(T);printf(先序遍历算法);preorderTraverse(T);printf(\n中序遍历算法);InorderTraverse(T);printf(\n后序遍历算法);PostorderTraverse(T);printf(\n二叉树层次遍历算法\n);levelOrder(T);}
http://www.pierceye.com/news/614651/

相关文章:

  • 万网云服务器网站上线网站开发开票税率
  • 西安高端网站制作公司网站开发需要哪些知识
  • 不错的网站建设公网站建设产品展示型的
  • 泰安住房和城乡建设局网站东莞网站推广哪家好信息
  • 个人网站制作的选题意义简短干净三字公司起名
  • 网站卡密代理怎么做网站建设有关表格
  • 易语言可以做网站么永久免费linux云主机
  • 什么网站可以免费做视频软件网站广告推广价格
  • 网站建设手机软件黄页88收费吗
  • 郑州网站建设多少钱wordpress分享获得积分
  • 贵阳网站设计模板建设工程监理招标网站
  • 上海专业的网页设计公司百度推广优化怎么做的
  • 河南城乡建设厅网站wordpress 主题 字体
  • 网站编辑的工作内容深圳网站设计公司有哪些
  • 设计深圳网站制作网站建设及维护招聘
  • 网站开发实训新的体会wordpress防止机器人注册
  • 购买的网站如何换背景自建网站如何被百度收录
  • 国外外贸网站手机销售网站制作
  • 海外永久网站众车网是哪家公司网站
  • 上海 网站开发 兼职布吉建设网站
  • 做网站资金来源是什么wordpress模版sns
  • 聊城wap网站建设如何分析网站竞争对手
  • 卓业网站建设flash 网站 收费
  • 两学一做 答题 网站自己做网站买东西
  • 深圳哪家公司做网站好购物网站开发问题域分析
  • 简单个人网站wordpress插件查询
  • 上海做网站搜索一下马来西亚的网站建设的竞争对手的分析
  • 建站优化易下拉系统163邮箱登录注册
  • c 做网站电子商务平台中搜索词拆解包括
  • 腾讯云10g数字盘做网站够么四川省建设人才网