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

PTA:后序和中序构造二叉树

后序和中序构造二叉树

  • 题目
    • 输入格式
    • 输出格式
    • 输入样例(及其对应的二叉树)
  • 代码

题目

本题目要求用后序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其先序序列。

输入格式

在第一行中输入元素个数。

第二行中输入后序序列,用空格分隔。

第三行中输入中序序列,用空格分隔。

输出格式

输出此二叉树的先序序列,用空格分隔,最后也有一个空格。

输入样例(及其对应的二叉树)

5
20 40 50 30 10
20 10 40 30 50
## 输出样例
10 20 30 40 50 

代码

#include <iostream>
#include <vector>
#include <unordered_map>class TreeNode {
public:int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};TreeNode* buildTree(std::vector<int>& inorder, std::vector<int>& postorder, int inStart, int inEnd, int postStart, int postEnd, std::unordered_map<int, int>& indexMap) {if (inStart > inEnd || postStart > postEnd) {return nullptr;}int rootVal = postorder[postEnd];TreeNode* root = new TreeNode(rootVal);int rootIndex = indexMap[rootVal];int leftSubtreeSize = rootIndex - inStart;root->left = buildTree(inorder, postorder, inStart, rootIndex - 1, postStart, postStart + leftSubtreeSize - 1, indexMap);root->right = buildTree(inorder, postorder, rootIndex + 1, inEnd, postStart + leftSubtreeSize, postEnd - 1, indexMap);return root;
}void preorderTraversal(TreeNode* root) {if (root == nullptr) {return;}std::cout << root->val << " ";preorderTraversal(root->left);preorderTraversal(root->right);
}int main() {int n;std::cin >> n;std::vector<int> postorder(n);std::vector<int> inorder(n);for (int i = 0; i < n; ++i) {std::cin >> postorder[i];}for (int i = 0; i < n; ++i) {std::cin >> inorder[i];}std::unordered_map<int, int> indexMap;for (int i = 0; i < n; ++i) {indexMap[inorder[i]] = i;}TreeNode* root = buildTree(inorder, postorder, 0, n - 1, 0, n - 1, indexMap);preorderTraversal(root);std::cout << std::endl;return 0;
}
http://www.lryc.cn/news/218245.html

相关文章:

  • 二十三种设计模式全面解析-适配器模式的妙用:异构数据库和不同版本API的完美兼容!
  • K7系列FPGA进行FLASH读写1——CCLK控制(STARTUPE2原语)
  • 【Kafka】基本概念
  • 如何在Vue3项目中使用防抖节流技巧
  • 快速排序(Java)
  • 在ffmpeg中,如何把h264转换为rgb格式
  • 【重磅】Cookies、headers、Session规律总结,搞定卡点
  • 【雷达原理】雷达杂波抑制方法
  • Python-敲木鱼升级版(真手动版敲木鱼)
  • Websocket @ServerEndpoint不能注入@Autowired
  • Unity热更新
  • 如何用维格云搭建和一键训练你的钧瓷AI机器人?
  • 整理的一些Java细节问题
  • 初识AUTOSAR网络管理
  • Flink SQL Hive Connector使用场景
  • 【Docker】联合探讨Docker:容器化技术的革命性应用
  • dirhunt使用手册,中文版
  • 【从0到1设计一个网关】如何设计一个稳定的网关?
  • chromedp库编写程序
  • pngquant failed to build, make sure that libpng-dev is installed 问题
  • 进程控制(二):进程等待
  • SWAT-MODFLOW地表水与地下水耦合模型的建模及应用
  • 使用navicat操纵数据库
  • websocket入门
  • Word里MathType插件符号表消失了
  • 利用MySQL玩转数据分析之基础篇
  • 【ML】分类问题
  • python @classmethod装饰器作用 与 使用 类方法 实例方法
  • layui form 中input输入框长度的统一设置
  • 【WSL/WSL 2-Redis】解决Windows无法安装WSL Ubuntu子系统与Redis安装