二叉树后序遍历非递归代码c语言
时间: 2024-11-24 10:40:10 浏览: 27
二叉树的后序遍历是非递归的一种常用算法,它按照“左-右-根”的顺序访问节点。非递归实现通常会利用栈的数据结构来模拟递归过程。以下是一个简单的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void printPostorderHelper(TreeNode* root) {
if (root == NULL) return;
// 先处理左子树
printPostorderHelper(root->left);
// 然后处理右子树
printPostorderHelper(root->right);
// 最后打印当前节点
printf("%d ", root->val);
}
void postorderTraversal(TreeNode* root) {
Stack<TreeNode*> stack;
if (root != NULL) {
stack.push(root);
}
while (!stack.isEmpty()) {
TreeNode* current = stack.pop();
// 如果当前节点不为空,先处理其右子树
if (current->right != NULL) {
stack.push(current->right);
}
// 再处理左子树
if (current->left != NULL) {
stack.push(current->left);
}
// 当左右子树都处理完后,再打印当前节点
printf("%d ", current->val);
}
}
int main() {
// 创建并初始化一个二叉树
// ... (这部分需要你自己填充)
TreeNode* root = ...;
if (root != NULL) {
postorderTraversal(root);
}
return 0;
}
```
在这个代码里,`printPostorderHelper` 函数是一个辅助函数,用于实际进行后序遍历。`postorderTraversal` 主函数负责初始化栈,并通过循环控制遍历过程。当遍历完成后,节点值会被依次输出。
阅读全文