后序遍历的非递归算法的c语言代码
时间: 2024-12-06 12:26:06 浏览: 18
后序遍历(也称为“LRU”或“Last In First Out”),通常用于二叉树的遍历中,特别是当需要先访问最近添加的节点时。非递归的后序遍历可以使用栈数据结构来实现。这里是一个简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 帮助函数,将当前节点压入栈
void pushNode(TreeNode** root, stackType* s) {
if (*root == NULL)
return;
push(s, *root);
pushNode(&(*root)->left, s);
pushNode(&(*root)->right, s);
}
// 主后序遍历函数
void postorderTraversal(TreeNode* root) {
stackType s = createStack();
pushNode(&root, &s); // 先把根节点入栈
while (!isEmpty(s)) {
TreeNode* node = pop(s);
printf("%d ", node->val); // 打印节点值
pushNode(&node->right, &s); // 先处理右子节点
pushNode(&node->left, &s); // 再处理左子节点
}
destroyStack(s);
}
// 测试代码
int main() {
// 创建一个二叉树并进行后序遍历
// ...
TreeNode* root = ...; // 实际的二叉树节点
postorderTraversal(root);
return 0;
}
```
在这个代码中,`pushNode` 函数负责将节点及其子节点依次放入栈中,然后`postorderTraversal`函数通过循环取出栈顶元素并打印,直到栈为空。
阅读全文