C语言二叉树后序遍历?
时间: 2024-03-01 21:47:06 浏览: 22
以下是C语言实现二叉树后序遍历的代码示例:
```c
void PostOrderTraverse(BiTree T) {
if (T != NULL) {
PostOrderTraverse(T->left); // 递归遍历左子树
PostOrderTraverse(T->right); // 递归遍历右子树
printf("%d ", T->data); // 打印结点值
}
}
```
这段代码使用递归的方式实现了二叉树的后序遍历。首先递归遍历左子树,然后递归遍历右子树,最后打印当前结点的值。
相关问题
c语言二叉树的后序遍历代码
以下是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);
}
```
该代码使用递归方法实现后序遍历,先遍历左子树,再遍历右子树,最后输出根节点的值。
c语言实现后序遍历二叉树
后序遍历二叉树的顺序是:先遍历左子树,再遍历右子树,最后访问根节点。可以通过递归或使用栈来实现。
下面是使用递归实现后序遍历的代码:
```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` 指针来记录上一次访问的节点,避免重复访问。