当前位置:网站首页>二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中,父节点先于它的子节点被访问,就是先序遍历;
二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中,父节点先于它的子节点被访问,就是先序遍历;
2022-07-02 12:00: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;
}
边栏推荐
- 报错:npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
- Socket and socket address
- Printf function and scanf function in C language
- 华为面试题: 没有回文串
- 天猫商品详情接口(APP,H5端)
- 871. 最低加油次数 : 简单优先队列(堆)贪心题
- ONNX+TensorRT:将预处理操作写入ONNX并完成TRT部署
- TiDB 集群最小部署的拓扑架构
- C language exercises - (array)
- Niuke Practice 101
猜你喜欢

LeetCode 2310. The number of digits is the sum of integers of K

taobao.trade.memo.add( 对一笔交易添加备注 )接口,淘宝店铺插旗接口,淘宝订单插旗API接口,oAuth2.0接口

YoloV6训练:训练自己数据集遇到的各种问题

【NOI模拟赛】伊莉斯elis(贪心,模拟)

Yolov6 training: various problems encountered in training your dataset

forEach的错误用法,你都学废了吗

Large top heap, small top heap and heap sequencing

C#代码审计实战+前置知识

Advanced C language (realize simple address book)

Base64 编码原来还可以这么理解
随机推荐
Introduction to C language -- array
【题解】Educational Codeforces Round 82
LeetCode_滑动窗口_中等_395.至少有 K 个重复字符的最长子串
vChain: Enabling Verifiable Boolean Range Queries over Blockchain Databases(sigmod‘2019)
fatal: unsafe repository is owned by someone else 的解决方法
Socket and socket address
C# 线程传参
LeetCode_字符串_简单_412.Fizz Buzz
Thoroughly master prototype__ proto__、 Relationship before constructor (JS prototype, prototype chain)
解决el-radio-group 回显后不能编辑问题
MFC timer usage
Add vector formula in rich text editor (MathType for TinyMCE, visual addition)
C语言实现N皇后问题
taobao. logistics. dummy. Send (no logistics delivery processing) interface, Taobao store delivery API interface, Taobao order delivery interface, Taobao R2 interface, Taobao oau2.0 interface
tmall. product. schema. Get (product information acquisition schema acquisition), Taobao store upload commodity API interface, Taobao commodity publishing interface, Taobao commodity upload API interf
C语言习题---(数组)
qml 弹窗框架,可定制
学习使用php实现公历农历转换的方法代码
YoloV6训练:训练自己数据集遇到的各种问题
报错:npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.