从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]

返回如下的二叉树:

    3/ \9  20/  \15   7

思路: 根据构造二叉树的流程,中序遍历的访问顺序为左-中-右;后序遍历的方位顺序为左-右-中。

  1. 后序最后一个节点为根节点,在中序列表中查找根节点值
  2. 将中序列表分割成左子树中序列表和右子树中序列表
  3. 因为对于同样的树中序和后序列表长度相同,所以根据左子树中序列表和右子树中序列表的长度将后序列表分割成左子树后序和右子树后序
  4. 对左子树根节点,右子树根节点递归调用
  5. 返回根节点
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder)
{int n=inorder.size();if(n>0){TreeNode* root=new TreeNode(postorder[n-1]);vector<int>::iterator it=find(inorder.begin(),inorder.end(),postorder[n-1]);vector<int> il,ir,pl,pr;il.assign(inorder.begin(),it);ir.assign(it+1,inorder.end());int l,r;l=il.size();r=ir.size();//中序后序遍历长度相等pl.assign(postorder.begin(),postorder.begin()+l);pr.assign(postorder.begin()+l,postorder.end());root->left=buildTree(il,pl);root->right=buildTree(ir,pr);return root;}else return NULL;
}

从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3/ \9  20/  \15   7

思路:
和中序后序构造思路基本一致
根据构造二叉树的流程,前序遍历的访问顺序为中-左-右,中序遍历的访问顺序为左-中-右。

  1. 前序第一一个节点为根节点,在中序列表中查找根节点值
  2. 将中序列表分割成左子树中序列表和右子树中序列表
  3. 因为对于同样的树中序和前序列表长度相同,所以根据左子树中序列表和右子树中序列表的长度将前序列表分割成左子树前序和右子树前序
  4. 对左子树根节点,右子树根节点递归调用
  5. 返回根节点
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
{int n=preorder.size();if(n>0){TreeNode* root=new TreeNode(preorder[0]);vector<int>::iterator it=find(inorder.begin(),inorder.end(),preorder[0]);vector<int> il,ir,pl,pr;il.assign(inorder.begin(),it);ir.assign(it+1,inorder.end());int l,r;l=il.size();r=ir.size();//中序前序遍历长度相等pl.assign(preorder.begin()+1,preorder.begin()+l+1);pr.assign(preorder.begin()+l+1,preorder.end());root->left=buildTree(pl,il);root->right=buildTree(pr,ir);return root;}else return NULL;
}

转载于:https://www.cnblogs.com/wendyy/p/9332633.html

[leetcode]从中序与后序/前序遍历序列构造二叉树相关推荐

  1. 【无标题】c++日常练习(16)——从中序与前序遍历序列构造二叉树

    #从中序与前序遍历序列构造二叉树 给定一个树的前序和中序遍历,请构造二叉树并返回其根节点. #include <stdio.h> #include<vector> using ...

  2. LeetCode 106/105 从中序和后序/前序遍历序列构造二叉树

    原理: 请参考文章:数据结构笔记:二叉树的构造(根据遍历顺序构造二叉树) 先序遍历 中序遍历 后序序列组成情况,   106后序和中序构造二叉树 题目链接:力扣 思路: 递归 递归函数声明: Tree ...

  3. 从中序和前序遍历序列构造二叉树

    题目链接 class Solution {public:unordered_map<int,int> hash;TreeNode* build(int rooti,int left,int ...

  4. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  5. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  6. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  7. 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树

    两题各自的链接放这里了: 链接: 106 链接: 105 106.从中序与后序遍历序列构造二叉树 如果你是不知道理论的,那就得仔细分析了, 举个例子: 输入:inorder = [9,3,15,20, ...

  8. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法

    如题: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素.例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9, ...

  9. 数组反向遍历ios_LeetCode106.从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inor...)...

    106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7]后序遍 ...

最新文章

  1. java值参_Java陷阱之慎用入参做返回值详解
  2. fond+html属性,JQuery 干货篇之选择元素
  3. 网络推广外包专员浅析网络推广外包优化当中的那些细枝末节!
  4. linux使用X11捕捉鼠标,如何在Linux下合法地以编程方式捕获第二个鼠标或轨迹球,X?...
  5. zen3架构_全新Zen3架构,AMD发布最新Ryzen5000系列处理器
  6. ajax,php文件读取
  7. redis hash
  8. sklearn学习总结
  9. 应用实例_兴达奇智能燃烧控制器BMU460DP现场应用实例图
  10. poj3264RMQ
  11. Hbase Region拆分入门
  12. java来电报名字的软件_教你一招,手机来电话可以语音报出来电人的姓名和电话号码,收藏...
  13. BootstrapBlazor实战 Menu 导航菜单使用(2)
  14. markdown的基本使用方法 1
  15. 东营计算机考试,2018年东营市上半年计算机等级考试报名时间
  16. 在Redhat/Centos上安装和配置TortoiseHg和kdiff3
  17. shell命令查阅端口信息_Linux服务器管理Shell经典命令
  18. 玩转96boards之(一)---高通410c板硬件
  19. oracle 查找索引大小写,关于sql:Oracle中不区分大小写的搜索
  20. MICRO和GO-MICRO

热门文章

  1. 人工智能在语音和数字图像处理领域有哪些具体化应用_智能呼叫中心系统有哪些优势...
  2. 打印机更换感光鼓单元k_干货,激光打印机常见故障维修方法总结
  3. cv2.error: OpenCV(4.5.2) : -1 : error: (-5:Bad argument) in function ‘rectangle‘
  4. 【完美解决方案】module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
  5. LeetCode 1086. 前五科的均分(map + 优先队列)
  6. python的指针跟c的区别_ctypes中的LP_x*指针和*p指针有什么区别?(以及与结构的奇怪交互)...
  7. sklearn分类器:朴素贝叶斯
  8. Django视图(python函数)
  9. python中的多线程-共享全局变量
  10. 学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计