用c语言编译一个中序非递归遍历二叉树程序
时间: 2024-10-25 10:15:48 浏览: 15
在C语言中,非递归的方式遍历二叉树通常使用栈数据结构。这里是一个简单的例子,展示如何使用前驱节点和栈来实现中序遍历(左->根->右):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 先将所有左子节点入栈,然后访问当前节点,最后访问右子节点
void inorderTraversalNonRecursive(TreeNode* root) {
if (root == NULL) return; // 如果为空直接返回
TreeNode* stack[100]; // 假设最大深度不超过100层
int top = -1;
while (root != NULL || top != -1) {
// 当还有未访问的节点
while (root != NULL) {
stack[++top] = root;
root = root->left;
}
// 出栈并访问当前节点
root = stack[top--];
printf("%d ", root->val); // 打印节点值
// 移动到右子节点
root = root->right;
}
}
int main() {
// 初始化一个二叉树实例并设置节点值,这里省略了创建树的具体步骤
TreeNode* tree = ...;
inorderTraversalNonRecursive(tree);
return 0;
}
```
阅读全文