用C语言编写一个非递归的中序遍历二叉树的程序
时间: 2024-10-25 16:15:59 浏览: 21
在C语言中,我们可以使用栈数据结构来实现非递归的中序遍历二叉树。这是通过模拟递归过程,即先访问左子树,然后访问根节点,最后访问右子树。以下是详细的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 先序遍历辅助函数,用于入栈
void inorderHelper(TreeNode* node, Stack* stack) {
if (node != NULL) {
// 左子树
inorderHelper(node->left, stack);
// 入栈当前节点
push(stack, node);
// 右子树
inorderHelper(node->right, stack);
}
}
// 非递归中序遍历函数
void inorderTraversal(TreeNode* root) {
Stack* stack = createStack(); // 初始化空栈
inorderHelper(root, stack);
while (!isEmpty(stack)) {
TreeNode* temp = pop(stack); // 弹出栈顶节点并访问其值
printf("%d ", temp->val);
free(temp); // 释放内存
}
destroyStack(stack); // 销毁栈
}
int main() {
// 假设你已经有一个二叉树的创建和节点插入部分
TreeNode* root = ...;
inorderTraversal(root);
return 0;
}
```
在这个程序中,我们首先在`inorderHelper`函数中处理左子树、将节点压入栈,然后处理右子树。在主函数中,我们创建一个栈并调用`inorderTraversal`进行遍历。
阅读全文