用c语言编制中序非递归遍历二叉树程序,示例一个完整代码,代码初级一点
时间: 2024-10-25 19:15:41 浏览: 45
在C语言中,我们可以使用栈数据结构来实现中序遍历二叉树的非递归版本。这种做法通常被称为“迭代法”或者“深度优先搜索”的变种。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
if (node != NULL) {
node->val = data;
node->left = NULL;
node->right = NULL;
}
return node;
}
// 中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 初始化栈
Stack<TreeNode*> stack;
while (root || !stack.isEmpty()) {
// 先将左子树入栈
while (root) {
push(stack, root);
root = root->left;
}
// 弹出并访问根节点
root = pop(stack);
printf("%d ", root->val); // 打印节点值
// 将右子树入栈
root = root->right;
}
}
// 栈操作
void push(Stack* stack, TreeNode* node) {
stack->top = node;
stack->size++;
}
TreeNode* pop(Stack* stack) {
if (stack->isEmpty()) {
return NULL;
}
stack->top = stack->top->next;
stack->size--;
return stack->top;
}
// 测试代码
int main() {
// 创建一个二叉树示例
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("Inorder traversal of the tree: ");
inorderTraversal(root);
printf("\n");
return 0;
}
```
阅读全文