当前位置:网站首页>The traversal methods of binary tree mainly include: first order traversal, middle order traversal, second order traversal, and hierarchical traversal. First order, middle order, and second order actu
The traversal methods of binary tree mainly include: first order traversal, middle order traversal, second order traversal, and hierarchical traversal. First order, middle order, and second order actu
2022-07-02 15:14:00 【MASJLE】
#include<stdio.h>
#include<malloc.h>
#define QUEUE_SIZE 5
typedef struct BTNode {
char element;
BTNode* left;
BTNode* right;
}BTNode,*BTNodePtr;
typedef struct BTNodePtrQueue {
BTNodePtr* nodePtrs;
int front;
int rear;
}BTNodePtrQueue, *QueuePtr;
QueuePtr initQueue() {
QueuePtr resultQueuePtr = (QueuePtr)malloc(sizeof(struct BTNodePtrQueue));
resultQueuePtr->nodePtrs = (BTNodePtr*)malloc(QUEUE_SIZE * sizeof(BTNodePtr));
resultQueuePtr->front = 0;
resultQueuePtr->rear = 1;
resultQueuePtr;
}
bool isQueueEmpty(QueuePtr paraQueuePtr) {
if ((paraQueuePtr->front + 1) % QUEUE_SIZE == paraQueuePtr->rear) {
return true;
}
return false;
}
void enqueue(QueuePtr paraQueuePtr, BTNodePtr paraBTNodePtr) {
printf("front = %d, rear = %d\n",paraQueuePtr->front,paraQueuePtr->rear);
if ((paraQueuePtr->rear + 1) % QUEUE_SIZE == paraQueuePtr->front % QUEUE_SIZE) {
printf("Error, trying to enqueue %c. queue full.\n",paraBTNodePtr->element);
return;
}
paraQueuePtr->nodePtrs[paraQueuePtr->rear] = paraBTNodePtr;
paraQueuePtr->rear = (paraQueuePtr->rear + 1) % QUEUE_SIZE;
printf("enqueue %c ends.\n",paraBTNodePtr->element);
}
BTNodePtr dequeue(QueuePtr paraQueuePtr) {
if (isQueueEmpty(paraQueuePtr)) {
printf("Error, empty queue\n");
return NULL;
}
paraQueuePtr->front = (paraQueuePtr->front + 1) % QUEUE_SIZE;
printf("dequeue %c ends.\n",paraQueuePtr->nodePtrs[paraQueuePtr->front]->element);
return paraQueuePtr->nodePtrs[paraQueuePtr->front];
}
BTNodePtr constructBTNode(char paraChar) {
BTNodePtr resultPtr = (BTNodePtr)malloc(sizeof(BTNode));
resultPtr->element = paraChar;
resultPtr->right = NULL;
resultPtr->left = NULL;
return resultPtr;
}
BTNodePtr stringToBTree(char* paraString) {
int i;
char ch;
QueuePtr tempQueuePtr = initQueue();
BTNodePtr resultHeader;
BTNodePtr tempParent, tempLeftChild, tempRightChild;
i = 0;
ch = paraString[i];
resultHeader = constructBTNode(ch);
enqueue(tempQueuePtr, resultHeader);
while (!isQueueEmpty(tempQueuePtr)) {
tempParent = dequeue(tempQueuePtr);
i++;
ch = paraString[i];
if (ch == '#') {
tempParent->left = NULL;
}
else {
tempLeftChild = constructBTNode(ch);
enqueue(tempQueuePtr, tempLeftChild);
tempParent->left = tempLeftChild;
}
i++;
ch = paraString[i];
if (ch == '#') {
tempParent->right = NULL;
}
else {
tempRightChild = constructBTNode(ch);
enqueue(tempQueuePtr, tempRightChild);
tempParent->right = tempRightChild;
}
}
return resultHeader;
}
void levelWise(BTNodePtr paraTreePtr) {
char tempString[100];
int i = 0;
QueuePtr tempQueuePtr = initQueue();
BTNodePtr tempNodePtr;
enqueue(tempQueuePtr, paraTreePtr);
while (!isQueueEmpty(tempQueuePtr)) {
tempNodePtr = dequeue(tempQueuePtr);
tempString[i] = tempNodePtr->element;
i++;
if (tempNodePtr->left != NULL) {
enqueue(tempQueuePtr, tempNodePtr->left);
}
if (tempNodePtr->right != NULL) {
enqueue(tempQueuePtr, tempNodePtr->right);
}
}
tempString[i] = ' ';
printf("LevelWise:-> %s\n",tempString);
}
void preorder(BTNodePtr tempPtr) {
if (tempPtr == NULL) {
return;
}
printf("%c",tempPtr->element);
preorder(tempPtr->left);
preorder(tempPtr->right);
}
void inorder(BTNodePtr tempPtr) {
if (tempPtr == NULL) {
return;
}
inorder(tempPtr->left);
printf("%c",tempPtr->element);
inorder(tempPtr->right);
}
void postorder(BTNodePtr tempPtr) {
if (tempPtr == NULL) {
return;
}
postorder(tempPtr->left);
postorder(tempPtr->right);
printf("%c",tempPtr->element);
}
int main() {
BTNodePtr tempHeader;
tempHeader = constructBTNode('c');
printf("There is only one node. preorder visit:");
preorder(tempHeader);
printf("\r\n");
char* tempString = "acde#bf######";
tempHeader = stringToBTree(tempString);
printf("Preorder:-> ");
preorder(tempHeader);
printf("\r\n");
printf("Inorder:-> ");
inorder(tempHeader);
printf("\r\n");
printf("Postorder:-> ");
postorder(tempHeader);
printf("\r\n");
printf("LevelWise: \n");
levelWise(tempHeader);
printf("\r\n");
return 1;
}
边栏推荐
- 实用调试技巧
- Dragonfly low code security tool platform development path
- How does CTO help the business?
- 04_ Stack
- Why can't programmers who can only program become excellent developers?
- Mavn builds nexus private server
- Sharp tool SPL for post SQL calculation
- 【C语言】详解指针的初阶和进阶以及注意点(1)
- It's no exaggeration to say that this is the most user-friendly basic tutorial of pytest I've ever seen
- Huawei interview question: no palindrome string
猜你喜欢

LeetCode 209. Minimum length subarray

Have you learned the wrong usage of foreach

. Net core logging system

IE 浏览器正式退休

LeetCode - 搜索二维矩阵

LeetCode 209. 长度最小的子数组

Li Chuang EDA learning notes 15: draw border or import border (DXF file)

GeoServer offline map service construction and layer Publishing
[email protected] : The platform “win32“ is incompatible with this module."/>info [email protected] : The platform “win32“ is incompatible with this module.

LeetCode 2320. 统计放置房子的方式数
随机推荐
18_Redis_Redis主从复制&&集群搭建
传感器数据怎么写入电脑数据库
How to conduct TPC-C test on tidb
广州市应急管理局发布7月高温高湿化工安全提醒
Principles, language, compilation, interpretation
LeetCode 209. 长度最小的子数组
编译原理课程实践——实现一个初等函数运算语言的解释器或编译器
Ad20 cannot select the solution of component packaging in PCB editor
Topology architecture of the minimum deployment of tidb cluster
vChain: Enabling Verifiable Boolean Range Queries over Blockchain Databases(sigmod‘2019)
Points clés de l'examen de principe de compilation pour l'année scolaire 2021 - 2022 [Université chinoise d'outre - mer]
使用 TiUP 部署 TiDB 集群
Deploy tidb cluster with tiup
06_ Stack and queue conversion
19_Redis_宕机后手动配置主机
How does CTO help the business?
c语言入门--数组
【NOI模拟赛】刮痧(动态规划)
C#延时、在线程中开启定时器、获取系统时间
Application and practice of Jenkins pipeline