输出二叉树后序遍历的逆序c语言
时间: 2024-10-06 13:03:05 浏览: 68
在C语言中,后序遍历(Postorder Traversal)是一种访问二叉树节点的方式,通常最后访问根节点。如果需要得到后序遍历的逆序结果,也就是先访问根节点,然后左右子树,这就变成了前序遍历(Preorder Traversal)的顺序。下面是C语言中如何实现这个转换的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 原始的后序遍历函数
void postorderTraversal(TreeNode* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->val); // 输出结点值
}
// 转换后的前序遍历模拟函数(非标准C)
// 因为标准C没有递归栈支持,这里仅做演示
int* preOrderReversedTraversal(TreeNode* root, int* result, int* index) {
if (root == NULL) return result; // 结束条件
result[*index++] = root->val; // 先访问根
result = preOrderReversedTraversal(root->right, result, index); // 然后右子树
result = preOrderReversedTraversal(root->left, result, index); // 最后左子树
return result;
}
int main() {
// 初始化并构建你的二叉树
TreeNode* tree = ...;
int size = 0;
int* reversedPostorder = preOrderReversedTraversal(tree, &reversedPostorder, &size);
for (int i = size - 1; i >= 0; i--) { // 注意逆序打印
printf("%d ", reversedPostorder[i]);
}
free(reversedPostorder); // 释放内存
return 0;
}
```
阅读全文