用C语言编写程序,对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列
时间: 2023-06-05 16:09:00 浏览: 141
好的,这是一个关于C语言编程的问题,我可以回答它。对于一棵二叉树,前序遍历需要先访问根结点,然后访问左子树,最后访问右子树。中序遍历需要先访问左子树,然后访问根结点,最后访问右子树。后序遍历需要先访问左子树,然后访问右子树,最后访问根结点。因此,对于这棵树的前序遍历、中序遍历及后序遍历,遍历序列分别为:前序遍历序列、中序遍历序列、后序遍历序列。你可以通过使用递归的方式来实现这些遍历序列的输出。
相关问题
用c语言写程序,已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列 【问题描述】 已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列。 【输入形式】 一个树的中序遍历序列 该树后序遍历序列,中间用空格分开。输入序列中仅含有小写字母,且没有重复的字母 【输出形式】 一个树的前序遍历序列 【样例输入】 dbeafcg debfgca 【样例输出】 abdecfg
这道题可以用递归来解决,具体思路如下:
1. 后序遍历序列的最后一个元素为根节点;
2. 在中序遍历序列中找到根节点,那么根节点左边的所有元素都为左子树的中序遍历序列,右边的所有元素都为右子树的中序遍历序列;
3. 知道左子树的中序遍历序列和右子树的中序遍历序列,可以计算出左子树的后序遍历序列和右子树的后序遍历序列;
4. 知道左子树的后序遍历序列和右子树的后序遍历序列,可以递归地求出左子树的前序遍历序列和右子树的前序遍历序列;
5. 根据前序遍历的顺序,先输出根节点,然后输出左子树的前序遍历序列,最后输出右子树的前序遍历序列。
下面是代码实现:
已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列。 【输入形式】 一个树的中序遍历序列 该树后序遍历序列,中间用空格分开。输入序列中仅含有小写字母,且没有重复的字母 【输出形式】 一个树的前序遍历序列C语言
以下是 C++ 代码,可以参考:
```cpp
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
unordered_map<char, int> umap;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(vector<char>& inorder, vector<char>& postorder, int in_left, int in_right, int post_left, int post_right) {
if (in_left > in_right || post_left > post_right) {
return NULL;
}
char root_val = postorder[post_right];
int in_root_idx = umap[root_val];
TreeNode* root = new TreeNode(root_val);
int left_len = in_root_idx - in_left;
root->left = buildTree(inorder, postorder, in_left, in_root_idx - 1, post_left, post_left + left_len - 1);
root->right = buildTree(inorder, postorder, in_root_idx + 1, in_right, post_left + left_len, post_right - 1);
return root;
}
void preorder(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preorder(root->left);
preorder(root->right);
}
int main() {
vector<char> inorder, postorder;
char val;
while (cin >> val) {
inorder.push_back(val);
}
while (cin >> val) {
postorder.push_back(val);
}
int n = inorder.size();
for (int i = 0; i < n; i++) {
umap[inorder[i]] = i;
}
TreeNode* root = buildTree(inorder, postorder, 0, n - 1, 0, n - 1);
preorder(root);
return 0;
}
```
其中,`buildTree` 函数用于构建二叉树,`preorder` 函数用于输出前序遍历序列。
阅读全文
相关推荐













