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

重建二叉树

输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。

注意:

  • 二叉树中每个节点的值都互不相同;
  • 输入的前序遍历和中序遍历一定合法;

数据范围

树中节点数量范围 [0,100]

样例

给定:
前序遍历是:[3, 9, 20, 15, 7]
中序遍历是:[9, 3, 15, 20, 7]返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]
返回的二叉树如下所示:3/ \9  20/  \15   7

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:unordered_map<int,int> pos;     //用hash表记录每个点在中序遍历的位置vector<int> _preorder,_inorder; //动态数组存储前序遍历和中序遍历,用于创建树TreeNode* build(int a,int b,int x,int y)        //创建数{if(a>b) return NULL;  //区间为空的时候auto root=new TreeNode(_preorder[a]); //创建根节点int k=pos[root->val];       //子树根节点在中序遍历序列的位置// int k=-1,i=0;// while(_inorder[i]!=root->val){//     i++;// }// k=i;root->left=build(a+1,k-1-x+a+1,x,k-1);    root->right=build(k-1-x+a+1+1,b,k+1,y);return root;     //返回根节点}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {_preorder=preorder,_inorder=inorder;int n=inorder.size();for(int i=0;i<n;i++) pos[_inorder[i]]=i;return build(0,n-1,0,n-1);                  //返回递归结果}
};

http://www.lryc.cn/news/120482.html

相关文章:

  • 支付整体架构
  • 百度智能云:千帆大模型平台接入Llama 2等33个大模型,上线103个Prompt模板
  • 烦人的幻灯片——拓扑排序
  • 无涯教程-Perl - ord函数
  • Python爬虫:js逆向调式操作及调式中遇到debugger问题
  • HTML网页制作技巧:打造出色的用户体验
  • 探究使用HTTP代理ip后无法访问网站的原因与解决方案
  • SpringBoot 全局异常处理进阶
  • 数据结构(一):顺序表详解
  • 【周末闲谈】人工智能热潮下的AIGC到底指的是什么?
  • sklearn垃圾邮件分类
  • UI美工设计岗位的工作职责
  • ES6链判断运算符(?.)的正确打开方式
  • 删除块参照 删除块定义
  • 机器学习笔记:李宏毅ChatGPT:生成式学习的两种策略
  • React 组件防止冒泡方法
  • MAUI+Blazor 如何开启浏览器调试工具
  • 【Spring MVC】Spring MVC基于注解的程序开发
  • 前端探索之旅
  • “冰箭卫士·IP发布会”首次亮相第14届海峡两岸(厦门)文博会
  • 数学建模学习(9):模拟退火算法
  • 带你认识储存以及数据库新技术演进
  • 腾讯云服务器镜像操作系统大全_Linux_Windows清单
  • 基于k8s job设计与实现CI/CD系统
  • ⌈算法进阶⌋图论::并查集——快速理解到熟练运用
  • 【ROS】fsd_algorithm架构学习与源码分析(致敬)
  • PHP最简单自定义自己的框架定义常量自动生成目录(三)
  • 栈和队列详解
  • 数据结构 | 树的定义及实现
  • Delphi7通过VB6之COM对象调用FreeBASIC写的DLL功能