C++实现输入一颗二叉树的前序遍历和中序遍历,输出后序遍历
时间: 2024-06-15 08:07:08 浏览: 174
要实现输入一棵二叉树的前序遍历和中序遍历,然后输出后序遍历,可以按照以下步骤进行:
1. 首先,我们需要定义一个二叉树的结构,包括节点的值和左右子节点的指针。
2. 接下来,根据输入的前序遍历和中序遍历构建二叉树。具体步骤如下:
- 前序遍历的第一个元素是根节点的值,我们可以将其作为根节点,并创建一个新的节点。
- 在中序遍历中找到根节点的位置,将中序遍历分为左子树和右子树。
- 根据左子树和右子树的长度,将前序遍历分为左子树和右子树。
- 递归地构建左子树和右子树。
3. 最后,通过后序遍历输出二叉树的节点值。具体步骤如下:
- 后序遍历先输出左子树的节点值,再输出右子树的节点值,最后输出根节点的值。
- 递归地进行后序遍历。
下面是C++代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.empty() || inorder.empty()) {
return NULL;
}
int rootVal = preorder[0];
TreeNode* root = new TreeNode(rootVal);
int rootIndex = 0;
while (inorder[rootIndex] != rootVal) {
rootIndex++;
}
vector<int> leftPreorder(preorder.begin() + 1, preorder.begin() + rootIndex + 1);
vector<int> leftInorder(inorder.begin(), inorder.begin() + rootIndex);
vector<int> rightPreorder(preorder.begin() + rootIndex + 1, preorder.end());
vector<int> rightInorder(inorder.begin() + rootIndex + 1, inorder.end());
root->left = buildTree(leftPreorder, leftInorder);
root->right = buildTree(rightPreorder, rightInorder);
return root;
}
void postorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
int main() {
vector<int> preorder = {1, 2, 4, 5, 3, 6};
vector<int> inorder = {4, 2, 5, 1, 6, 3};
TreeNode* root = buildTree(preorder, inorder);
cout << "后序遍历结果:";
postorderTraversal(root);
cout << endl;
return 0;
}
```
运行以上代码,输出结果为后序遍历的结果。
阅读全文