[剑指offer]8.重建二叉树
题目
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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.重建二叉树相关推荐
- 【LeetCode】剑指 Offer 07. 重建二叉树
[LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...
- 剑指Offer #04 重建二叉树(递归)
题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...
- 剑指Offer系列 重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer之重建二叉树
1 问题 重建二叉树:给定二叉树的先序遍历(根左右)和中序(左中右)遍历结果,建立这棵二叉树.输入保证二叉树无重复结点 以先序{1, 2, 4, 7, 3, 5, 6, 8}和中序{4, 7, 2, ...
- 剑指offer——7.重建二叉树
题目: 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4, ...
- 剑指 Offer 07. 重建二叉树【千字分析,三种方法】
立志用最少的代码做最高效的表达 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,2 ...
- 【※ LeetCode 剑指 Offer 07. 重建二叉树(中等)】尚待完善
题目: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 来源:力扣(LeetCode) 链接:https://leetc ...
- 剑指offer 07重建二叉树(根据前序、中序遍历)草真tm难
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ...
- 剑指 Offer 07. 重建二叉树
⭐简单说两句⭐ CSDN个人主页:后端小知识
最新文章
- Unity Pro builder创建模块化仓库建筑学习教程
- 【Java】eclipse如何导入项目
- 配置nfs服务器出现的问题
- sdut 3333 数据结构实验之栈与队列六:下一较大值(二)
- 为什么接口需要加密传输
- 题解-BOI 2004 Sequence
- 数学分析:函数序列及其一致收敛性
- mtk协议与qc协议_通用充电器快充协议QC2.0,QC3.0,MTK PE,PE+,充电识别
- matlab的罗马数字怎么写好看图解,【我想知道1—100的罗马数字怎样写啊就是ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪ这些等】作业帮...
- nuvoton 开发环境安装问题
- 1236: 数的逆转
- 小程序+二维码(带logo图片,可直接运行)
- 不能撑开盒子css,CSS padding在什么情况下不撑开盒子
- 转:理想主义终结年代的七种兵器
- YEDROUDJ-NET: AN EFFICIENT CNN FOR SPATIAL STEGANALYSIS【Yedroudj-Net:一个高效的空间隐写分析CNN】
- VMware虚拟机Ubuntu自适应屏幕大小
- Linux-Mysql 源码包安装初始化报错
- python计算平均绩点_【python】以五分制绩点为基础的绩点计算器,可计算学分加权平均...
- 计算机显示u盘容量只有1m,为什么新买的U盘容量大小与实际显示大小不一样?...
- 数字图像处理(13): 形态学处理——图像开运算与图像闭运算