给定二叉树的前序遍历和中序遍历,,输出后序遍历结果。

代码:


#include <iostream>
#include <vector>
using   namespace   std;struct  TreeNode
{int val;TreeNode   *left;TreeNode    *right;TreeNode (int x) : val(x),    left(NULL),     right(NULL){}
};TreeNode *  reConstructBinaryTree (vector<int> pre ,vector<int> in)
{if( pre.size()==NULL|| in.size()==NULL)return NULL;TreeNode *root = new TreeNode(pre[0]);   //前序遍历:根左右,,第一个为根int i;for ( i =0; i<in.size()&& in[i]!=pre[0]; i++);   //找到中序遍历中根结点的位置i.vector<int> pre_left, in_left, pre_right, in_right;int pre_i=1;for(int j=0; j<in.size();j++){if(j<i){in_left.push_back(in[j]);pre_left.push_back(pre[pre_i]);pre_i++;}else if(j>i){in_right.push_back(in[j]);pre_right.push_back(pre[pre_i]);pre_i++;}}root->left = reConstructBinaryTree(pre_left, in_left);root->right =  reConstructBinaryTree(pre_right, in_right);return root;
}void Print(vector<int> &vec)
{int num=vec.size();if(vec.size()==0)return;else{for(int i=0; i<vec.size(); i++){cout<<vec[i]<<"  ";}cout<<endl;}
}void  PostOrder(TreeNode* root)  //后续遍历
{if(root==NULL)return ;else{PostOrder(root->left);PostOrder(root->right);cout<<root->val<<"  ";}return;
}int main()
{vector<int> pre={ 1,2,4,7,3,5,6,8};vector<int>  in = {4,7,2,1,5,3,8,6 };cout<<"前序遍历为:"<<endl;Print(pre);cout<<"中序遍历为:"<<endl;Print( in);TreeNode* root =  reConstructBinaryTree(  pre,  in);cout<<"后序遍历为:"<<endl;PostOrder(root);return 0;
}

运行结果:

前序遍历为:
1  2  4  7  3  5  6  8
中序遍历为:
4  7  2  1  5  3  8  6
后序遍历为:
7  4  2  5  8  6  3  1
Process returned 0 (0x0)   execution time : 0.161 s
Press any key to continue.

《剑指offer》面试题6——重构二叉树——已知 前序遍历和中序遍历,求后序遍历(C++)相关推荐

  1. 剑指offer——面试题58:二叉树的下一个结点

    剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...

  2. 剑指offer——面试题39:二叉树的深度

    剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...

  3. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径

    剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...

  4. 【递归】剑指offer——面试题19:二叉树的镜像

    剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...

  5. 剑指Offer - 面试题7. 重建二叉树(递归)

    1. 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍 ...

  6. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 1 package com.xsf.Sor ...

  7. [剑指offer]面试题19:二叉树的镜像

    面试题19:二叉树的镜像 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNo ...

  8. 剑指offer面试题[6]-重建二叉树

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

  9. 剑指offer面试题07. 重建二叉树(递归)(切片)

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 思路 详见链接 代码 #class TreeNode: # def __ini ...

  10. 剑指offer面试题[60]-将二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. /* struct TreeNode {int val;struct TreeNode *left;struct TreeN ...

最新文章

  1. 硬盘运行时断电会导致硬盘怎样
  2. 使用Gson进行json数据转换list to json 和json to list
  3. linux操作系统的体系架构,linux操作系统的体系架构_linux操作系统的关机指令
  4. 混沌分形之逻辑斯蒂(Logistic)映射系统
  5. Intent七大属性之总结
  6. bmf mysql_bmf 的动态 - SegmentFault 思否
  7. java序列化kr_序列化专用列表
  8. mysql日常问题记录
  9. arcgis运行慢_ArcGIS Pro运行较慢的诊断方法
  10. iOS UI自动化测试详解
  11. 7个最优秀的手机游戏引擎
  12. [从零开始学FPGA编程-4]:快速入门篇 - 操作步骤1 - 常见可编程器件PROM、PLA、PAL、GAL、CPLD、FPGA
  13. Windows 去除桌面烦人的小箭头
  14. 上帝视角看高清村庄卫星地图,附下载高清卫星地图最新方法
  15. 实验:跨域VPN-OptionC方式-方案一
  16. 目标检测最新综述文章(2019)
  17. 从零开始学素描nbsp;1小时学会肖…
  18. 2022年度电商“三巨头”阿里,京东,拼多多的“暗战”
  19. 路由桥接 新增路由 扩大wify 一个网线两个wify
  20. WebKit(WKUIDelegate)

热门文章

  1. 学python将来做什么工作_学Python编程能做什么工作?从事什么岗位?——这些问题你知道吗?...
  2. python中的translate_Python3 translate()方法
  3. python字典的基本操作编程_Python入门教程5. 字典基本操作【定义、运算、常用函数】 原创...
  4. vue 动画 抖动效果_css开发常用动画
  5. 中科院计算机考研对外调剂吗,考研调剂信息:2020年中科院接收调剂研究生!...
  6. 08. Django基础:模板层
  7. 谷粒商城:SPU管理规格显示404
  8. 谷粒商城:01. 分布式基础项目环境搭建
  9. 面向对象(Python):学习笔记之模块和包
  10. C++_auto_ptr与unique_ptr智能指针