《剑指offer》面试题6——重构二叉树——已知 前序遍历和中序遍历,求后序遍历(C++)
给定二叉树的前序遍历和中序遍历,,输出后序遍历结果。
代码:
#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++)相关推荐
- 剑指offer——面试题58:二叉树的下一个结点
剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...
- 剑指offer——面试题39:二叉树的深度
剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...
- 【重点】剑指offer——面试题25:二叉树中和为某一值的路径
剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...
- 【递归】剑指offer——面试题19:二叉树的镜像
剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...
- 剑指Offer - 面试题7. 重建二叉树(递归)
1. 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍 ...
- 剑指offer面试题6 重建二叉树(java)
注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 1 package com.xsf.Sor ...
- [剑指offer]面试题19:二叉树的镜像
面试题19:二叉树的镜像 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNo ...
- 剑指offer面试题[6]-重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer面试题07. 重建二叉树(递归)(切片)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 思路 详见链接 代码 #class TreeNode: # def __ini ...
- 剑指offer面试题[60]-将二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. /* struct TreeNode {int val;struct TreeNode *left;struct TreeN ...
最新文章
- 硬盘运行时断电会导致硬盘怎样
- 使用Gson进行json数据转换list to json 和json to list
- linux操作系统的体系架构,linux操作系统的体系架构_linux操作系统的关机指令
- 混沌分形之逻辑斯蒂(Logistic)映射系统
- Intent七大属性之总结
- bmf mysql_bmf 的动态 - SegmentFault 思否
- java序列化kr_序列化专用列表
- mysql日常问题记录
- arcgis运行慢_ArcGIS Pro运行较慢的诊断方法
- iOS UI自动化测试详解
- 7个最优秀的手机游戏引擎
- [从零开始学FPGA编程-4]:快速入门篇 - 操作步骤1 - 常见可编程器件PROM、PLA、PAL、GAL、CPLD、FPGA
- Windows 去除桌面烦人的小箭头
- 上帝视角看高清村庄卫星地图,附下载高清卫星地图最新方法
- 实验:跨域VPN-OptionC方式-方案一
- 目标检测最新综述文章(2019)
- 从零开始学素描nbsp;1小时学会肖…
- 2022年度电商“三巨头”阿里,京东,拼多多的“暗战”
- 路由桥接 新增路由 扩大wify 一个网线两个wify
- WebKit(WKUIDelegate)
热门文章
- 学python将来做什么工作_学Python编程能做什么工作?从事什么岗位?——这些问题你知道吗?...
- python中的translate_Python3 translate()方法
- python字典的基本操作编程_Python入门教程5. 字典基本操作【定义、运算、常用函数】 原创...
- vue 动画 抖动效果_css开发常用动画
- 中科院计算机考研对外调剂吗,考研调剂信息:2020年中科院接收调剂研究生!...
- 08. Django基础:模板层
- 谷粒商城:SPU管理规格显示404
- 谷粒商城:01. 分布式基础项目环境搭建
- 面向对象(Python):学习笔记之模块和包
- C++_auto_ptr与unique_ptr智能指针