当前位置: 首页 > news >正文

玩转二叉树

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。

输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2

解题代码:

include

include

include <unordered_map>

include

using namespace std;

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

unordered_map<int, int> pos;

// 递归构建二叉树
TreeNode* build(vector& in, vector& pre, int inL, int inR, int preL, int preR) {
if (inL > inR || preL > preR) return nullptr;
int rootVal = pre[preL];
TreeNode* root = new TreeNode(rootVal);
int k = pos[rootVal];
int leftSize = k - inL;
root->left = build(in, pre, inL, k-1, preL+1, preL+leftSize);
root->right = build(in, pre, k+1, inR, preL+leftSize+1, preR);
return root;
}

// 层序遍历(先右后左,等价于镜面反转后的层序)
vector levelOrderReverse(TreeNode* root) {
vector res;
if (!root) return res;
queue<TreeNode> q;
q.push(root);
while (!q.empty()) {
TreeNode
node = q.front();
q.pop();
res.push_back(node->val);
// 先加右孩子,再加左孩子,实现镜面反转的层序
if (node->right) q.push(node->right);
if (node->left) q.push(node->left);
}
return res;
}

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

int n;
cin >> n;
vector<int> in(n), pre(n);
for (int i = 0; i < n; ++i) {cin >> in[i];pos[in[i]] = i;
}
for (int i = 0; i < n; ++i) cin >> pre[i];TreeNode* root = build(in, pre, 0, n-1, 0, n-1);
vector<int> ans = levelOrderReverse(root);// 输出结果
for (int i = 0; i < ans.size(); ++i) {if (i > 0) cout << " ";cout << ans[i];
}
cout << endl;return 0;

}

二叉树的相关知识,接下来一周都会是二叉树,会慢慢说知识点

http://www.jsqmd.com/news/482490/

相关文章:

  • Thinkphp和Laravel框架都支持 博物馆文物科普知识普及系统微信小程序-
  • Thinkphp和Laravel框架都支持微信小程序的展会展馆纪念馆门票在线预约管理系统19rtj
  • Thinkphp和Laravel框架都支持微信小程序的校园外卖系统 商家
  • Thinkphp和Laravel框架都支持心血管疾病风险预测小程序设计与实现-
  • Thinkphp和Laravel框架都支持微信小程序的校园社区报修上门维修系统
  • 网络安全、计算机网络、理论技术+企业级的产品实践经验相结合Part1 网络安全产品终端侦测与响应系统(EDR)网络侦测与响应系统(NDR)多引擎脆弱性(漏洞)扫描(VAS)网络安全威胁情报
  • 10个成功案例:AI应用架构师是如何用AI激活元宇宙商业生态的?
  • HashMap扩容机制
  • 更新-常用的Flask第三方扩展库清单合集教程和详细的代码示例
  • JavaDays08顺序结构And选择结构
  • 网络安全、渗透测试、安全开发、安全分析岗位面试笔记和参考答案,现已全部更新到服务器
  • HashMap详解
  • AI时代,.NET开发者的生存危机还是能力外挂?
  • 更新-DevOps运维人员必掌握的Linux命令清单教程合集
  • 在1panl安装 skill 比如安装腾讯gp咨询接口 Tushare skills,名称为tushare-data
  • 用mediainfo查看是否是后置mp4
  • 宁夏中宁枸杞品牌都有哪些?玺赞枸杞全维度解析 - 宁夏壹山网络
  • 【Vibe Coding解惑】从 Prompt 到 Code:生成流程解析
  • Godot游戏练习01-第11节-显示优化,游戏背景,Shader
  • 【数学笔记】反演变换
  • 2026春季W2(3.9~3.15)
  • 大语言模型的研究方向
  • 虚拟数字人品牌建设的“表情交互”架构:AI应用架构师的计算机视觉方案
  • 学习C语言第22天
  • 25级数应四班实验报告
  • HJ129 小红的双生数
  • NxN棋盘问题00:对角线特性
  • Java Object 类笔记
  • 聚力谱新篇,逐梦新征程!itc保伦股份市场服务部、设计部启动大会圆满举行!
  • React15 - React-Router v3 如何在react15项目中进行路由跳转和数据传递