根据前序和中序遍历输出后序c++
时间: 2024-11-09 08:28:43 浏览: 7
根据二叉树前序遍历和中序遍历的结果输出后序遍历(java)
在计算机科学中,如果我们想要通过已知的前序遍历和中序遍历顺序重建一棵二叉树并得到其后序遍历,这通常需要一些算法技巧。因为前序、中序和后序遍历分别对应根节点-左子树-右子树、左子树-根节点-右子树和左子树-右子树-根节点的访问模式。
以下是C++的一种解决方案,利用递归:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 中序遍历函数
TreeNode* inorderTraversal(TreeNode* root) {
if (root == nullptr) return nullptr;
return inorderTraversal(root->left) -> root -> right;
}
// 前序遍历函数
TreeNode* preorderTraversal(TreeNode* root) {
if (root == nullptr) return nullptr;
return new TreeNode(root->val) -> inorderTraversal(root->right) -> preorderTraversal(root->left);
}
// 后序遍历结果辅助函数
void printPostorderHelper(TreeNode* node, vector<int>& res) {
if (node == nullptr) return;
printPostorderHelper(node->left, res);
printPostorderHelper(node->right, res);
res.push_back(node->val);
}
// 输出后序遍历
void printPostorder(TreeNode* root) {
vector<int> res;
printPostorderHelper(root, res);
for (int val : res)
cout << val << " ";
cout << endl;
}
int main() {
// 创建示例二叉树
TreeNode* tree = new TreeNode(1); // 假设已有前序和中序遍历结果
// 填充中序遍历和构建二叉树
// ...
// 使用前序遍历生成二叉树结构
tree = preorderTraversal(tree);
// 输出后序遍历
printPostorder(tree);
return 0;
}
```
在这个代码中,`preorderTraversal`函数首先创建根节点,然后递归地处理左右子树的中序遍历。接着,我们有一个辅助函数`printPostorderHelper`用于逐步收集后序遍历的结果,并在主程序中打印出来。
阅读全文