c语言实现后序遍历二叉树
时间: 2023-10-11 13:07:03 浏览: 91
后序遍历二叉树的顺序是:先遍历左子树,再遍历右子树,最后访问根节点。可以通过递归或使用栈来实现。
下面是使用递归实现后序遍历的代码:
```c
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
void postorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val);
}
```
如果需要将遍历的结果存储到数组中,可以将 `printf("%d ", root->val);` 改为 `arr[num++] = root->val;`,其中 `num` 表示当前遍历到的节点数。
如果不想使用递归,可以使用栈来实现。具体思路是先将根节点入栈,然后弹出栈顶元素,将其右子节点和左子节点依次入栈,最后访问根节点。具体代码如下:
```c
void postorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
struct TreeNode* stack[1000];
int top = -1;
struct TreeNode* p = root;
struct TreeNode* lastVisit = NULL;
while (p != NULL || top != -1) {
while (p != NULL) {
stack[++top] = p;
p = p->left;
}
p = stack[top];
if (p->right == NULL || p->right == lastVisit) {
printf("%d ", p->val);
top--;
lastVisit = p;
p = NULL;
} else {
p = p->right;
}
}
}
```
这里使用了一个 `lastVisit` 指针来记录上一次访问的节点,避免重复访问。
阅读全文