题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

这题乍看之下无从下手,实际上也不难。

/*** Definition for binary tree* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {vector<int> left_pre,left_vin,right_pre,right_vin;int len=vin.size();if(len==0)return NULL;TreeNode* ans=new TreeNode(pre[0]);int i,leftnum,rightnum;for(i=0;i<len;i++){if(vin[i]==pre[0])break;left_vin.push_back(vin[i]);}leftnum=i;for(i=i+1,rightnum=0;i<len;i++,rightnum++){right_vin.push_back(vin[i]);}for(i=1;i<=leftnum;i++){left_pre.push_back(pre[i]);}for(;i<len;i++){right_pre.push_back(pre[i]);}ans->left=reConstructBinaryTree(left_pre,left_vin);ans->right=reConstructBinaryTree(right_pre,right_vin);return ans;}
};
思路:
1.根据先序遍历数列确定根结点。
2.找出根节点在中序遍历数列中的位置,左边都是左子树的结点,右边都是右子树的结点。
3.分别得到左子树的结点个数和右子树的结点个数。
4.根据结点个数从先序遍历数列中划分出先序遍历数列的左子树部分和右子树部分。
5.用得到的左子树先序遍历数列和中序遍历数列构造左子树。
6.用得到的右子树先序遍历数列和中序遍历数列构造右子树。
7.递归地构造整一棵树。

根据先序遍历数列和中序遍历数列重建二叉树相关推荐

  1. PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的后序遍历序列和中序遍历序列,让求层次遍历的序列. 分析: 后序遍历:先 左子树.右子树 ,最后再遍历根结点. 中序遍历:先左子树,再根 ...

  2. 二叉树(前序遍历序列、中序遍历序列、后序遍历序列、层次遍历序列、深度、叶子数)

    Description 已知二叉树的一个按前序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点).请建立二叉树,并输出建立二叉树的前序遍历序列.中序遍历序列.后序遍历序列.层次遍历序列 ...

  3. tree traversal (树的遍历) - inorder traversal (中序遍历)

    tree traversal (树的遍历) - inorder traversal (中序遍历) 1. tree traversal - 树的遍历 二叉树的遍历 (traversing binary ...

  4. 前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal)

    前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal) 1. 前序遍历 (preorder ...

  5. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  6. 用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树

    用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树. 首先说明:思想来自文都考研洪老师.包括逻辑框架的搭建,此篇文章为框架搭建完成后将细节补充完整. 首先,用到的数学的证明思想是 ...

  7. Java版二叉树的前序遍历查找、中序遍历查找和后序遍历查找

    文章收藏的好句子:任何挫折,如果无法彻底击败你,那一定会使你更强. 目录 1.二叉树的节点查找 1.1 前序遍历查找 1.2 中序遍历查找 1.3 后序遍历查找 1.二叉树的节点查找  1.1 前序遍 ...

  8. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  9. 二叉树:已知先序和中序求后序,已知中序和后序求先序

    树的三种遍历方式的遍历顺序: 先序遍历:根.左子树.右子树(特点:第一个元素为根) 中序遍历:左子树.根.右子树(特点:根的两边分别为左子树和右子树) 后序遍历:左子树.右子树.根(特点:最后一个元素 ...

最新文章

  1. java jdbc工具类抽取_JavaWeb入门(三):JDBC工具类的抽取
  2. Swift语言教程中文文档
  3. JavaWeb(九)——JavaBean、Filter
  4. mysql数据库引擎调优
  5. mysql003三表查询.三表查询.自链接查询
  6. oracle基础授权,Oracle基础学习3--Oracle创建用户并授权
  7. Qt图形界面编程入门(Qt的历史、Qt安装资源链接、Qt Creator简介)
  8. 程序园冬天好冷怎么办?
  9. 程序员网上晒出新同事与老同事一起吃饭的照片,太搞笑
  10. Shell 07 项目案例
  11. mvc源码解读(10)-ParameterDescriptor方法Action方法的参数描述对象
  12. 软考倒计时27天:信息系统集成专业技术知识
  13. shadow Dom(shadowRoot) 访问
  14. 中小企业信息化的时机如何把握?
  15. Uniapp打iOS离线包到出ipa安装思路
  16. 使用树莓派3开发板,基于android things 物联网系统来运行TensorFlow解析图像
  17. 朴树歌词分析--python爬虫
  18. 性能测试监控TP50、TP99、TP999含义
  19. jqGrid----下拉列表框下拉联动,dataEvents回调函数。
  20. AM335x DDR3配置

热门文章

  1. 【VBAPlanet】如何实现数据精确查询与匹配
  2. [附源码]JAVA+ssm计算机毕业设计白果园网上水果超市(程序+Lw)
  3. 男性身材焦虑报告:他们最爱看男人小腿?
  4. html中transtion属性,htmltransition属性
  5. 华为董事长:已攻克!
  6. Elasticsearch-基础介绍及索引原理分析
  7. 机器学习 -- 信用卡评分模型 -- 互联网金融风控
  8. php源码更换短信宝接口教程,Thinkphp5结合sms-bao短信宝手机短信接口使用
  9. android游戏模拟驾驶,成为驾驶员模拟器
  10. Vue · Table:手写横向竖向滚动表格,分页、条数设置