用c语言写二叉树中序非递归遍历代码
时间: 2024-11-06 11:20:29 浏览: 36
在C语言中,非递归实现二叉树的中序遍历通常会使用栈数据结构来模拟递归过程。以下是一个简单的示例,这个例子中我们假设有一个名为`Node`的结构体,它代表二叉树的节点,有`value`、`left`和`right`三个成员。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int value;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root == NULL) return; // 避免空指针访问
stack<TreeNode*> s; // 初始化一个空栈
TreeNode* curr = root;
while (curr != NULL || !s.isEmpty()) { // 当根节点不为空或者栈不空
while (curr != NULL) { // 只要当前节点不为空,就入栈并访问其左节点
s.push(curr);
curr = curr->left;
}
curr = s.pop(); // 弹出栈顶元素,访问并移动到右节点
printf("%d ", curr->value); // 输出节点值
curr = curr->right; // 更新当前节点为弹出节点的右子节点
}
}
// 示例二叉树创建和测试
int main() {
TreeNode* root = malloc(sizeof(TreeNode));
root->value = 1;
root->left = malloc(sizeof(TreeNode));
root->left->value = 2;
root->right = malloc(sizeof(TreeNode));
root->right->value = 3;
root->left->left = malloc(sizeof(TreeNode));
root->left->left->value = 4;
root->left->right = malloc(sizeof(TreeNode));
root->left->right->value = 5;
printf("Inorder traversal of the tree is: ");
inorderTraversal(root);
free(root); // 记得释放内存
return 0;
}
```
阅读全文