文章目录

  • 1. 题目
  • 2. 解题

1. 题目


类似POJ 2255 Tree Recovery

2. 解题

class Solution {public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {unordered_map<int,int> m;//哈希表for(int i = 0; i < inorder.size(); ++i) {m[inorder[i]] = i;//方便后面查找位置}return build(preorder, inorder,0,preorder.size()-1,0,inorder.size()-1,m);}TreeNode* build(vector<int>& preorder, vector<int>& inorder, int pS, int pE, int iS, int iE, unordered_map<int,int> &m){if(pS > pE)return NULL;TreeNode *root = new TreeNode(preorder[pS]);int leftlen = m[preorder[pS]]-iS;root->left = build(preorder,inorder,pS+1,pS+leftlen,iS,m[preorder[pS]]-1,m);root->right = build(preorder,inorder,pS+1+leftlen,pE,m[preorder[pS]]+1,iE,m);return root;}
};
  • 别人的循环解法,很牛,也很难理解
class Solution {//别人写的,循环法
public:TreeNode* buildTree(vector<int>& pre, vector<int>& in) {if (pre.empty()) return NULL;stack<TreeNode*> S;TreeNode* root = new TreeNode(pre[0]);S.push(root);for (int i = 1, j = 0; i < pre.size(); i++) {  // i-前序序号,j-中序序号TreeNode *back = NULL, *cur = new TreeNode(pre[i]);while (!S.empty() && S.top()->val == in[j]) {back = S.top(), S.pop(), j++;}  if (back)back->right = cur;elseS.top()->left = cur;S.push(cur);}return root;}
};

LeetCode 105. 已知前序中序 求二叉树相关推荐

  1. LeetCode 889. 已知前序后序 求二叉树(不唯一)

    1. 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7 ...

  2. 二叉树已知前序中序求后序(超简单)(java)

    首先解题思路来自b站某高手,思路清奇,请看官先看视频: 无脑秒解!已知先/后序遍历与中序遍历,求后/先序遍历._哔哩哔哩_bilibili大佬轻喷,这个题做很简单,但是想做的快做的准应该没有比这更快的 ...

  3. 已知前序中序求层序 c语言递归,二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现...

    # re: 二叉树的遍历:前序,中序输出有点问题,但是不知道到怎么修改,想请教各位大神  回复  更多评论 #include"stdio.h" #include"mall ...

  4. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

    二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序)   之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...

  5. 已知前序中序输出后序(java)返回值是数组

    例子: 前序:1, 2, 3, 4, 5, 6(根左右) 中序:3, 2, 4, 1, 6, 5(左根右) 后序:3, 4, 2, 6, 5, 1(左右根) 1.先说根据前序中序求后序,前序总是沿着根 ...

  6. 已知前序中序,求后序

    已知二叉树的前序和中序,求其后序 例:前序(A B D G H C E I F J ) 中序(G D H B A E I C J F) 其后序为:G H D B I E J F C A 思路:先序的遍 ...

  7. POJ 2255 Tree Recovery(已知前序中序,求后序)

    1. 题目链接:http://poj.org/problem?id=2255 2. 题目大意: 给定二叉树的前序和中序序列,输出其后序序列 3. 思考过程: 4. AC代码 /*** @descrip ...

  8. java前中后序_前序中序求后序的java算法

    二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树: 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树: 后序遍历:对任一子树, ...

  9. C/C++面试题—重建二叉树【前序 + 中序- 重建二叉树 和 后序 + 中序 - 重建二叉树】

    题目介绍 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...

最新文章

  1. MySQL创建用户与授权方法
  2. 图解从上电到执行main函数的处理
  3. javascript问题积累
  4. yagmail和keyring的安装与注册
  5. Learning Moodle 3.5 学习Moodle 3.5 Lynda课程中文字幕
  6. notepadpython插件_Notepad Python
  7. JavaScript 常见安全漏洞和自动化检测技术
  8. KUKA WorkVisual 编程教学
  9. golang mian函数和init函数
  10. canva怎么拼接图片_canvas图片拼接(横向)
  11. LINTCODE——吹气球
  12. 微信小程序监听手势左右滑动
  13. iOS仿微信录像和拍照(swift5.0)
  14. IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)
  15. 二叉树的前序遍历,中序遍历,后序遍历
  16. 从全备中恢复单库或单表,小心有坑!
  17. 核心微生物分析_中国白酒发酵过程中的核心微生物群及其与环境因子的关系-微生物学报.PDF...
  18. 请选择服务器许可证文件,获取并安装许可文件 | PowerMill 2022 | Autodesk Knowledge Network...
  19. 计算机精品免费视频下载 收藏
  20. rpcs3模拟器配置要求是什么?

热门文章

  1. unsigned int + int型结果分析
  2. 某月某日前包括当天吗_10月26日,你真的理解了导数的定义吗?(答思考题送猫王小音箱)...
  3. linux中bc用法英文,使用GNU bc在Linux Shell中进行数学运算
  4. nanotime java 博客园_System.nanoTime (计时工具类)
  5. JAVA基础学习之路(三)类定义及构造方法
  6. Hibernate写hql语句与不写hql语句的区别?
  7. 给javascript初学者的24条最佳实践
  8. ARM汇编Hello,World
  9. Web开发中需要注意的地方
  10. C++ 下一代标准库 tr1中默认的哈希 FNV hash