用c++编写一个程序,在自定义函数中完成下列功能并在主函数进行测试: (1)由树的先序遍历序列和后序遍历序列创建一棵二叉树。 (2)输出二叉树的后序遍历序列。 测试数据: 先序遍历序列:ABDGCEF 中序遍历序列:DGBAECF
时间: 2024-10-23 12:15:55 浏览: 52
C/C++:由先序序列和中序序列创建二叉树.rar(含完整注释)
为了在C++中实现这个功能,我们可以使用递归算法来构建二叉树并进行后序遍历。首先,我们需要定义一个二叉树节点结构体,然后编写一个函数来根据前序和后序遍历序列重建二叉树。最后,我们提供一个函数用于打印后序遍历。
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct TreeNode {
char data;
TreeNode* left;
TreeNode* right;
};
// 创建二叉树函数 - 根据前序遍历和后序遍历
TreeNode* buildTree(string preOrder, string postOrder) {
if (preOrder.empty() || postOrder.empty()) return nullptr;
int index = find(postOrder.begin(), postOrder.end(), preOrder[0]);
TreeNode* root = new TreeNode(preOrder[0]);
// 分离出左子树和右子树的后序遍历部分
string leftPostOrder = postOrder.substr(0, index);
string rightPostOrder = postOrder.substr(index + 1);
// 递归创建左右子树
root->left = buildTree(preOrder.substr(1, index), leftPostOrder);
root->right = buildTree(preOrder.substr(index + 1), rightPostOrder);
return root;
}
// 后序遍历打印
void printPostorder(TreeNode* node) {
if (node == nullptr) return;
printPostorder(node->left);
printPostorder(node->right);
cout << node->data;
}
int main() {
string preOrder = "ABDGCEF";
string postOrder = "DGBAECF";
// 构建二叉树
TreeNode* tree = buildTree(preOrder, postOrder);
// 输出二叉树的后序遍历序列
cout << "后序遍历序列: ";
printPostorder(tree);
return 0;
}
```
在上述代码中,`buildTree`函数根据给定的两个字符串(前序和后序遍历)构造了二叉树,而`printPostorder`函数则实现了后序遍历的输出。在`main`函数中,我们将这两个字符串传递给它们,并打印得到的后序遍历结果。
阅读全文