用c语言实现中序遍历二叉树的非递归算法,并可在编译软件运行
时间: 2023-12-19 14:04:33 浏览: 86
二叉树先序遍历的非递归算法具体实现
5星 · 资源好评率100%
下面是用C语言实现中序遍历二叉树的非递归算法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int value;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 定义栈结构体
typedef struct Stack {
int top;
int size;
TreeNode** data;
} Stack;
// 初始化栈
Stack* initStack(int size) {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->top = -1;
stack->size = size;
stack->data = (TreeNode**)malloc(size * sizeof(TreeNode*));
return stack;
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isFull(Stack* stack) {
return stack->top == stack->size - 1;
}
// 入栈操作
void push(Stack* stack, TreeNode* node) {
if (isFull(stack)) {
printf("Stack is full.\n");
return;
}
stack->data[++stack->top] = node;
}
// 出栈操作
TreeNode* pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return NULL;
}
return stack->data[stack->top--];
}
// 中序遍历二叉树的非递归算法
void inorderTraversal(TreeNode* root) {
Stack* stack = initStack(100); // 初始化栈
TreeNode* p = root; // 初始化指针
while (p || !isEmpty(stack)) { // 当指针不为空或栈不为空时
if (p) { // 如果指针不为空
push(stack, p); // 将指针入栈
p = p->left; // 指针指向左子树
} else { // 如果指针为空
p = pop(stack); // 将栈顶元素出栈并赋值给指针
printf("%d ", p->value); // 输出节点值
p = p->right; // 指针指向右子树
}
}
}
int main() {
// 构建二叉树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->value = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->value = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->value = 3;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->value = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->value = 5;
root->right->right->left = NULL;
root->right->right->right = NULL;
inorderTraversal(root); // 中序遍历二叉树
return 0;
}
```
将以上代码保存为一个.c文件,然后使用编译器(如gcc)进行编译,即可得到可执行文件。在命令行中运行可执行文件即可看到中序遍历二叉树的结果。
阅读全文