二叉树(按层遍历——队列模拟)

2024-06-15 20:32

本文主要是介绍二叉树(按层遍历——队列模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

"队列.h"文件#include <stdio.h>
#include <stdlib.h>typedef struct biTree elemType ;struct node{elemType * elem;struct node * next;
};struct queue{struct node * front;struct node * rear;
};struct queue * initQueue();struct queue * enQueue(struct queue * q,elemType elem);struct queue * deQueue(struct queue * q);struct queue * initQueue(){struct queue * q;q=(struct queue *)malloc(sizeof(struct queue));q->front=(struct node *)malloc(sizeof(struct node));q->rear=q->front;q->front->next=NULL;return q;
}struct queue * enQueue(struct queue * q,elemType * elem){struct node * p;p=(struct node *)malloc(sizeof(struct node));p->elem=elem;p->next=NULL;q->rear->next=p;q->rear=p;return q;
}struct queue * deQueue(struct queue * q){struct node * p;if(q->front==q->rear){printf("队列为空!无法删除!\n");}else{p=q->front->next;q->front->next=p->next;if(q->rear==p){q->rear=q->front;}free(p);}return q;
}"二叉树.h"文件#define  _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>struct biTree{char data;struct biTree * lchild, * rchild;
};struct biTree * initBiTree();struct biTree * createBiTree(struct biTree * bt);int preOrderTraverse(struct biTree * bt);int inOrderTraverse(struct biTree * bt);int postOrderTraverse(struct biTree * bt);int levelOrderTraverse(struct biTree * bt);int test();.c文件#include "二叉树.h"
#include "队列.h"#define MAX 100struct biTree * createBiTree(struct biTree * bt){int front,rear;char ch;struct biTree * p,* Queue[MAX];front=1,rear=0;printf("按层输入二叉树,虚结点输入'#'(结束符为'@'):\n");while((ch=getchar())!='@'){p=NULL;if(ch!='#'){p=(struct biTree *)malloc(sizeof(struct biTree));p->data=ch;p->lchild=p->rchild=NULL;}rear++;Queue[rear]=p;if(rear==1){bt=p;}else{if(p!=NULL&&Queue[front]!=NULL){if(rear%2==0){Queue[front]->lchild=p;}else{Queue[front]->rchild=p;}}if(rear%2==1){front++;}}}return bt;
}int preOrderTraverse(struct biTree * bt){if(bt!=NULL){printf("%c ",bt->data);preOrderTraverse(bt->lchild);preOrderTraverse(bt->rchild);}return 0;
}int inOrderTraverse(struct biTree * bt){if(bt!=NULL){inOrderTraverse(bt->lchild);printf("%c ",bt->data);inOrderTraverse(bt->rchild);}return 0;
}int postOrderTraverse(struct biTree * bt){if(bt!=NULL){postOrderTraverse(bt->lchild);postOrderTraverse(bt->rchild);printf("%c ",bt->data);}return 0;
}int levelOrderTraverse(struct biTree * bt){struct queue * queue;struct biTree * p;queue=initQueue();if(bt!=NULL){p=bt;enQueue(queue,p);printf("%c ",p->data);while(queue->front!=queue->rear){p=queue->front->next->elem;if(p->lchild!=NULL){enQueue(queue,p->lchild);printf("%c ",p->lchild->data);}if(p->rchild!=NULL){enQueue(queue,p->rchild);printf("%c ",p->rchild->data);}deQueue(queue);}}return 0;
}int test(){struct biTree * bt;bt=(struct biTree *)malloc(sizeof(struct biTree));bt=createBiTree(bt);preOrderTraverse(bt);printf("\n");inOrderTraverse(bt);printf("\n");postOrderTraverse(bt);printf("\n");levelOrderTraverse(bt);printf("\n");return 0;
}int main(){test();return 0;
}

这篇关于二叉树(按层遍历——队列模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064502

相关文章

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti