如题 (总结要点)

    1. 注意空值
    1. 假定数据是没有问题的
    1. 前序(根左右) ,中序(左根右), 故每次的第一个节点就是根节点

借鉴学习文章列表

  • 链接1:
  • 链接2:
  • ALiBaBaJavaCodingGuideLines有话说 :

1.题目

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

2. Solution代码

/**
* FileName: ${FILENAME}
* 类的详细说明 : 1. 注意空值
* 2. 假定数据是没有问题的
* 3.前序(根左右) ,中序(左根右), 故每次的第一个节点就是根节点
* @author SongZeShan
* @version 1.0
* @Date 2019/7/11 18:10
*/
public class Solution {
/**重建出该二叉树*/
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length==0||in.length==0||pre.length!=in.length){
return null;
}
//建树,根节点赋值
TreeNode treeNode = new TreeNode(pre[0]);
int index = indexOf(in,pre[0]);
//左子树长度为index-1
treeNode.left = reConstructBinaryTree(copyRange(pre, 1, index), copyRange(in, 0, index-1));
//右子树为长度为in.length-index
treeNode.right = reConstructBinaryTree(copyRange(pre, index+1, pre.length-1), copyRange(in, index+1, pre.length-1)); return treeNode;
}
/**复制下标*/
private int[] copyRange(int arr[],int beg,int end){
int []newArr = new int[end-beg+1];
for(int i=beg;i<=end;i++){
newArr[i-beg]=arr[i];
}
return newArr;
}
/**查找key值,返回索引index*/
private int indexOf(int []arr,int key){
for(int i=0;i<arr.length;i++){
if(key==arr[i]){
return i;
}
}
return -1;
}
}

3.TreeNode 二叉树代码

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}

4.测试

/**
* FileName: ${FILENAME}
* 类的详细说明
*
* @author SongZeShan
* @version 1.0
* @Date 2019/7/11 18:10
*/
public class Test {
public static void main(String[] args) {
Solution solution = new Solution();
int pre[] = {1,2,4,7,3,5,6,8};
int in[] = {4,7,2,1,5,3,8,6}; TreeNode treeNode = solution.reConstructBinaryTree(pre,in ); //输出测试
preOrder(treeNode);
System.out.println();
midOrder(treeNode);
}
/**遍历一次二叉树先序输出*/
private static void preOrder(TreeNode node){
if(node==null){
return ;
}
System.out.print(node.val+"\t");
preOrder(node.left);
preOrder(node.right);
}
/**遍历一次二叉树中序输出*/
private static void midOrder(TreeNode node){
if(node==null){
return ;
}
midOrder(node.left);
System.out.print(node.val+"\t");
midOrder(node.right);
}
}

测试结果 ,和原答案一模一样

1	2	4	7	3	5	6	8
4 7 2 1 5 3 8 6
Process finished with exit code 0

《剑指Offer》-004 -Java版二叉树先序和中序遍历返回原二叉树的更多相关文章

  1. 【剑指offer】Java版代码(完整版)

    原文地址:https://blog.csdn.net/baiye_xing/article/details/78428561 一.引言 <剑指offer>可谓是程序猿面试的神书了,在面试中 ...

  2. 剑指offer】Java版代码(完整版)

    转自:剑指offer]Java版代码(完整版) 转自:[剑指offer] JAVA版题解(完整版)

  3. 剑指offer(java版)【转】

    面试题 2 :实现单例模式 1. 饿汉式单例类 public class SingletonClass { private static final SingletonClass instance=n ...

  4. [转]剑指offer之Java源代码

    一.引言 <剑指offer>可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题.但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学 ...

  5. 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74612786冷血之心的博客) 剑指Offer(第二版)面试案例:树 ...

  6. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  7. 剑指Offer - 九度1349 - 数字在排序数组中出现的次数

    剑指Offer - 九度1349 - 数字在排序数组中出现的次数2013-11-23 00:47 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n, ...

  8. 剑指Offer(二十八):数组中出现次数超过一半的数字

    剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  9. 剑指Offer(三十五):数组中的逆序对

    剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

  10. 剑指Offer(一):二维数组中的查找

    一.前言 刷题平台:牛客网 二.题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...

随机推荐

  1. Maven 教程(12)— Maven生命周期和插件

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79549695 除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期 ...

  2. win7下每次打开Excel2007都提示向程序发送命令时出现问题的解决方案

    每次打开Excel2007都提示向程序发送命令时出现问题,要打开两次才可以打开,下面介绍该问题的解决办法. 第一种情况:也就是屏蔽DDE的解决方案,这是大多数人都是这种情况,该情况的解决办法: exc ...

  3. SQL Server -----创建sqlserver 数据库 、表

    新建数据库 1.右击  选择新建数据库 2.起一个名字   选择保存位置 3.放在之前建好的的文件夹中 点击确定 4.都要选择好 点击确定 5.确定之后如图 6.新建表 7.见一个表,常说的要满足三大 ...

  4. 在vue中导出excel表格

    初学者学习vue开发,想把前端项目中导出Excel表格,查了众多帖子,踩了很多坑,拿出来与大家分享一下经验. 安装依赖 //npm npm install file-saver -S npm inst ...

  5. TCMalloc - 基本流程

    SizeMap tcmalloc通过classid将不同的小对象映射到不同的对象桶中,sizemap记录了一些对象大小和对象class的映射以及反向映射,除此之外,还记录了一些ThreadCache与 ...

  6. 【题解】【网络流24题】汽车加油行驶问题 [P4009] [Loj6223]

    [题解][网络流24题]汽车加油行驶问题 [P4009] [Loj6223] 传送门:汽车加油行驶问题 \([P4009]\) \([Loj6223]\) [题目描述] 给出一个 \(N \times ...

  7. 『2019Summer Algorithms』

    一个暑假两次集训,感觉学了好多好多的东西,也挖了好多好多的坑,于是就决定写一篇关于算法的总结,用于熟悉新算法,也留下一点对新算法的理解. AC自动机 简单的说就是在\(trie\)树上实现\(KMP\ ...

  8. SpringBoot中使用@scheduled定时执行任务需要注意的坑

    spring boot: 计划任务@ EnableScheduling和@Scheduled @Scheduled中的参数说明 @Scheduled(fixedRate=2000):上一次开始执行时间 ...

  9. .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)

    .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml) 首先设置 Startup.cs 文件 配置 ConfigureServices services .Add ...

  10. Smobiler客户端会话

    //客户端会话存值 Client.Session["userid"] = Class1.userid; //客户端会话取值 userid = Client.Session[&quo ...