题目

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

代码

/*---------------------------------------
*   日期:2015-07-20
*   作者:SJF0115
*   题目: 8.重建二叉树
*   结果:AC
*   网址:http://www.nowcoder.com/books/coding-interviews/8a19cbe657394eeaac2f6ea9b0f6fcf6?rp=1
*   来源:剑指Offer
*   博客:
-----------------------------------------*/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;struct TreeNode{int val;TreeNode *left;TreeNode *right;TreeNode(int x):val(x),left(nullptr),right(nullptr){}
};class Solution{
public:struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {int size = pre.size();if(size == 0){return nullptr;}//ifreturn PreInBuildTree(pre,in,0,0,size);}
private:TreeNode* PreInBuildTree(vector<int> preorder,vector<int> inorder,int preIndex,int inIndex,int size){if(size == 0){return nullptr;}//if// 根节点TreeNode* root = new TreeNode(preorder[preIndex]);// 寻找根节点在中序遍历数组的下标int index = 0;for(int i = 0;i < size;++i){// 注意:inorder[inIndex+i]if(preorder[preIndex] == inorder[inIndex+i]){index = inIndex+i;break;}//if}//for// 左子树个数int leftSize = index - inIndex;// 右子树个数int rightSize = size - leftSize - 1;// 左子树root->left = PreInBuildTree(preorder,inorder,preIndex+1,inIndex,leftSize);// 右子树root->right = PreInBuildTree(preorder,inorder,preIndex+1+leftSize,index+1,rightSize);return root;}
};void PostOrder(TreeNode* root){if(root){PostOrder(root->left);PostOrder(root->right);cout<<root->val<<endl;}//if
}int main(){Solution s;vector<int> preOrder = {1,2,4,7,3,5,6,8};vector<int> inOrder = {4,7,2,1,5,3,8,6};TreeNode* root = s.reConstructBinaryTree(preOrder,inOrder);PostOrder(root);return 0;
}

[剑指offer]8.重建二叉树相关推荐

  1. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  2. 剑指Offer #04 重建二叉树(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...

  3. 剑指Offer系列 重建二叉树

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

  4. 剑指offer之重建二叉树

    1 问题 重建二叉树:给定二叉树的先序遍历(根左右)和中序(左中右)遍历结果,建立这棵二叉树.输入保证二叉树无重复结点 以先序{1, 2, 4, 7, 3, 5, 6, 8}和中序{4, 7, 2, ...

  5. 剑指offer——7.重建二叉树

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

  6. 剑指 Offer 07. 重建二叉树【千字分析,三种方法】

    立志用最少的代码做最高效的表达 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,2 ...

  7. 【※ LeetCode 剑指 Offer 07. 重建二叉树(中等)】尚待完善

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 来源:力扣(LeetCode) 链接:https://leetc ...

  8. 剑指offer 07重建二叉树(根据前序、中序遍历)草真tm难

    /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ...

  9. 剑指 Offer 07. 重建二叉树

    ⭐简单说两句⭐ CSDN个人主页:后端小知识

最新文章

  1. Unity Pro builder创建模块化仓库建筑学习教程
  2. 【Java】eclipse如何导入项目
  3. 配置nfs服务器出现的问题
  4. sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
  5. 为什么接口需要加密传输
  6. 题解-BOI 2004 Sequence
  7. 数学分析:函数序列及其一致收敛性
  8. mtk协议与qc协议_通用充电器快充协议QC2.0,QC3.0,MTK PE,PE+,充电识别
  9. matlab的罗马数字怎么写好看图解,【我想知道1—100的罗马数字怎样写啊就是ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪ这些等】作业帮...
  10. nuvoton 开发环境安装问题
  11. 1236: 数的逆转
  12. 小程序+二维码(带logo图片,可直接运行)
  13. 不能撑开盒子css,CSS padding在什么情况下不撑开盒子
  14. 转:理想主义终结年代的七种兵器
  15. YEDROUDJ-NET: AN EFFICIENT CNN FOR SPATIAL STEGANALYSIS【Yedroudj-Net:一个高效的空间隐写分析CNN】
  16. VMware虚拟机Ubuntu自适应屏幕大小
  17. Linux-Mysql 源码包安装初始化报错
  18. python计算平均绩点_【python】以五分制绩点为基础的绩点计算器,可计算学分加权平均...
  19. 计算机显示u盘容量只有1m,为什么新买的U盘容量大小与实际显示大小不一样?...
  20. 数字图像处理(13): 形态学处理——图像开运算与图像闭运算

热门文章

  1. Spring源码导入IDEA
  2. 在Ubuntu 14.04 TLS下openvas V8.0源代码安装过程
  3. SQL 注入工具集合
  4. iOS开发 Block的用法
  5. Notepad++ NppExport: 让你在Microsoft word 中粘贴语法高亮代码
  6. codeblocks如何watch指针
  7. 你这种直来直去的英语,买家受不了
  8. PMCAFF微课堂「已结束」 | 阿里资深运营揭秘电商运营与纯互联网运营的区别与互通
  9. 都是月饼惹的祸 124盒月饼太甜太温柔(结尾有彩蛋)
  10. 如何判断一个创业公司是否有上市前景?