#include #include #include <unordered_map> using namespace std;

struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} };

TreeNode* buildTree(vector& inorder, vector& postorder, int in_start, int in_end, int post_start, int post_end, unordered_map<int, int>& map) { if (in_start > in_end || post_start > post_end) { return NULL; } int root_val = postorder[post_end]; TreeNode* root = new TreeNode(root_val); int root_index = map[root_val]; int left_size = root_index - in_start; root->left = buildTree(inorder, postorder, in_start, root_index - 1, post_start, post_start + left_size - 1, map); root->right = buildTree(inorder, postorder, root_index + 1, in_end, post_start + left_size, post_end - 1, map); return root; }

vector levelorderTraversal(TreeNode* root) { vector result; if (root == NULL) { return result; } queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* node = q.front(); q.pop(); result.push_back(node->val); if (node->left != NULL) { q.push(node->left); } if (node->right != NULL) { q.push(node->right); } } return result; }

int main() { int N; cin >> N; vector postorder(N); vector inorder(N); unordered_map<int, int> map; for (int i = 0; i < N; i++) { cin >> postorder[i]; } for (int i = 0; i < N; i++) { cin >> inorder[i]; map[inorder[i]] = i; } TreeNode* root = buildTree(inorder, postorder, 0, N - 1, 0, N - 1, map); vector levelorder = levelorderTraversal(root); for (int i = 0; i < levelorder.size(); i++) { cout << levelorder[i]; if (i != levelorder.size() - 1) { cout << " "; } } return 0;

编写一个C++代码给定一棵二叉树的后序遍历和中序遍历请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N≤30是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出

原文地址: http://www.cveoy.top/t/topic/hyDo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录