二叉树后序遍历非递归算法c语言
时间: 2023-09-12 15:09:51 浏览: 114
二叉树的后序遍历非递归算法可以使用栈来实现。具体步骤如下:
1. 定义一个栈和一个指针p,初始时p指向根节点,栈为空。
2. 循环执行以下操作,直到栈为空:
a. 将p指向的节点及其左子树依次入栈,直到p指向的节点没有左子树。
b. 循环执行以下操作,直到栈顶元素的右子树为空或者栈顶元素的右子树已经被访问过:
i. 将栈顶元素出栈,并将其右子树标记为已访问。
ii. 如果栈顶元素的右子树为空,或者栈顶元素的右子树已经被访问过,就输出栈顶元素。
c. 如果栈不为空,将栈顶元素的右子树标记为未访问,并将p指向栈顶元素的右子树。
具体的C语言代码如下:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void postorderTraversal(TreeNode* root) {
if (!root) {
return;
}
TreeNode* stack[100];
int top = -1;
TreeNode* p = root;
TreeNode* pre = NULL;
while (p || top != -1) {
while (p) {
stack[++top] = p;
p = p->left;
}
p = stack[top];
if (p->right == NULL || p->right == pre) {
printf("%d ", p->val);
pre = p;
top--;
p = NULL;
} else {
p = p->right;
}
}
}
```
其中,top表示栈顶指针,pre表示已经访问过的右子树的指针。具体实现中,我们使用一个数组来模拟栈,数组的大小可以根据实际情况进行修改。
阅读全文