用c写二叉树前序遍历非递归完整代码
时间: 2024-12-02 10:20:20 浏览: 7
在C语言中,非递归的方式实现二叉树的前序遍历通常通过栈数据结构来辅助完成。以下是完整的非递归前序遍历代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 助手函数:入栈操作
void push(TreeNode* node, Stack* stack) {
if (node != NULL) {
stack->top = (TreeNode*)malloc(sizeof(TreeNode));
stack->top->val = node->val;
stack->top->left = NULL;
stack->top->right = NULL;
stack->size++;
push(node->left, stack);
push(node->right, stack);
}
}
// 助手函数:出栈并打印当前节点值
void printCurrentNode(Stack* stack) {
if (stack->size > 0) {
printf("%d ", stack->top->val);
free(stack->top);
stack->top = stack->top->left; // 移动指针到左孩子
stack->size--;
if (stack->top == NULL) { // 如果栈为空,结束循环
return;
}
}
}
// 非递归前序遍历
void preorderTraversal(TreeNode* root) {
Stack* stack = (Stack*)malloc(sizeof(Stack)); // 初始化空栈
stack->top = NULL;
stack->size = 0;
push(root, stack); // 先入根节点
while (stack->size > 0) {
printCurrentNode(stack);
}
free(stack); // 释放内存
}
int main() {
// 例如创建一棵简单的二叉树,这里省略实际构造过程
TreeNode* root = ...;
preorderTraversal(root); // 调用前序遍历
return 0;
}
```
阅读全文