C语言非递归后序遍历二叉树
时间: 2023-11-03 07:16:03 浏览: 80
非递归后序遍历二叉树的方法是使用栈来模拟递归过程。具体实现如下:
1. 创建一个栈,将根节点入栈。
2. while循环,当栈非空时进行遍历:
2.1 取出栈顶节点,如果该节点没有孩子节点或者其孩子节点都已经被访问过,则访问该节点并将该节点出栈。
2.2 否则,将该节点的孩子节点按照右孩子、左孩子的顺序依次入栈。
3. 遍历完成后,栈为空,输出遍历结果。
C语言代码实现如下:
```
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
void postorderTraversal(TreeNode* root) {
if (!root) {
return;
}
TreeNode* stack[1000];
int top = -1;
TreeNode* node = root;
TreeNode* prev = NULL;
while (node || top != -1) {
while (node) {
stack[++top] = node;
node = node->right;
}
node = stack[top];
if (!node->left || node->left == prev) {
printf("%d ", node->val);
prev = node;
top--;
node = NULL;
} else {
node = node->left;
}
}
}
```
其中,stack数组作为栈存储节点,top变量记录栈顶位置。node变量表示当前访问的节点,prev变量表示上一次访问的节点。
在while循环中,首先将当前节点的右孩子入栈,然后将左孩子入栈,直到左子树访问完毕。当左子树访问完毕后,如果该节点没有右孩子或者右孩子已经被访问过,则访问该节点并将其出栈,否则将当前节点置为右孩子,继续遍历右子树。
阅读全文