#include #include using namespace std;

// 定义二叉树的结点 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x): val(x), left(nullptr), right(nullptr) {} };

// 根据中序遍历和前序遍历构建二叉树 TreeNode* buildTree(vector& inorder, vector& preorder, int inStart, int inEnd, int preStart, int preEnd) { if (inStart > inEnd || preStart > preEnd) { return nullptr; } int rootVal = preorder[preStart]; // 前序遍历的第一个结点为根结点 int rootIndex; // 根结点在中序遍历中的索引 for (int i = inStart; i <= inEnd; i++) { if (inorder[i] == rootVal) { rootIndex = i; break; } } int leftSize = rootIndex - inStart; // 左子树的结点个数 TreeNode* root = new TreeNode(rootVal); // 递归构建左子树和右子树 root->left = buildTree(inorder, preorder, inStart, rootIndex - 1, preStart + 1, preStart + leftSize); root->right = buildTree(inorder, preorder, rootIndex + 1, inEnd, preStart + leftSize + 1, preEnd); return root; }

// 将二叉树做镜面反转 void mirrorTree(TreeNode* root) { if (root == nullptr) { return; } TreeNode* temp = root->left; root->left = root->right; root->right = temp; mirrorTree(root->left); mirrorTree(root->right); }

// 层序遍历二叉树 vector levelOrder(TreeNode* root) { vector result; if (root == nullptr) { return result; } queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* curr = q.front(); q.pop(); result.push_back(curr->val); if (curr->left != nullptr) { q.push(curr->left); } if (curr->right != nullptr) { q.push(curr->right); } } return result; }

int main() { int N; cin >> N; vector inorder(N); vector preorder(N); for (int i = 0; i < N; i++) { cin >> inorder[i]; } for (int i = 0; i < N; i++) { cin >> preorder[i]; } TreeNode* root = buildTree(inorder, preorder, 0, N - 1, 0, N - 1); mirrorTree(root); vector result = levelOrder(root); for (int i = 0; i < result.size(); i++) { cout << result[i]; if (i != result.size() - 1) { cout << " "; } } return 0;

编写一个C++代码给定一棵二叉树的中序遍历和前序遍历请你先将树做个镜面反转再输出反转后的层序遍历的序列。所谓镜面反转是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N≤30是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔行首尾不得有

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

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