c语言实现中序遍历的非递归算法
时间: 2024-11-07 18:06:02 浏览: 38
中序遍历的递归算法-数据结构c语言版严蔚敏PPT
在 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)
return;
// 先左子树
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); // 输出节点值
}
destroyStack(stack);
}
int main() {
// 初始化示例树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
inorderTraversal(root);
return 0;
}
```
在这个例子中,`inorderHelper` 函数用于递归地处理左子树并将节点压入栈中。然后在主函数中,我们创建一个空栈,调用 `inorderTraversal` 并打印出栈顶元素,直到栈为空。
阅读全文