输入二叉树的前序和中序遍历,重建该二叉树

public class _Q06 {public BinaryTreeNode ConstractBinaryTree(int preOrder[], int inOrder[]) throws Exception{if(preOrder == null || inOrder == null) return null; // 处理非法输入if(preOrder.length == 0 || inOrder.length == 0) return null; // 边界条件 -- 和处理非法输入的作用是不同的-注意// 遇到的问题:一开始当做是C++里面的数组来处理,直接按是否等于空来确定,但是此处都是对象// 而且Arrays.copyOfRange要么返回一个对象要么抛异常// 所以通过是否为空来判断也是不合理的而且直接挂掉或者异常// if(preOrder == null || inOrder == null) return null;if(preOrder.length != inOrder.length) throw new Exception("order length is not same");boolean find = false;BinaryTreeNode root = new BinaryTreeNode();for(int i=0; i<inOrder.length; i++){if(inOrder[i] == preOrder[0]){find = true;root.value = preOrder[0];root.leftChild = ConstractBinaryTree(Arrays.copyOfRange(preOrder, 1, i+1),Arrays.copyOfRange(inOrder, 0, i));root.rightChild = ConstractBinaryTree(Arrays.copyOfRange(preOrder, i+1, preOrder.length),Arrays.copyOfRange(inOrder, i+1, inOrder.length));}}if (!find) {throw new Exception("invalid input");}return root;}// 中序输出public void PrintTree(BinaryTreeNode root){if(root == null) return;PrintTree(root.leftChild);System.out.print(root.value + " ");PrintTree(root.rightChild);}}

测试代码:

public class _Q06Test extends TestCase{_Q06 q06 = new _Q06();int pre[] = {1,2,4,7,3,5,6,8};int in[] = {4,7,2,1,5,3,8,6};/*** * @comment testQ06首字母要小写,否则出现如下错误: no test found in **** @param    * @return void  * @throws* @date 2016年4月13日 下午4:31:49*/public void testQ06(){try {BinaryTreeNode root = q06.ConstractBinaryTree(pre, in);q06.PrintTree(root);} catch (Exception e) {e.printStackTrace();}}}

二叉树结点:

public class BinaryTreeNode<T>{public T value;public BinaryTreeNode leftChild;public BinaryTreeNode rightChild;}

【剑指offer-Java版】06重建二叉树相关推荐

  1. 剑指offer java版 test3—从尾到头打印链表

    标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...

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

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

  3. 剑指offer第7题 重建二叉树

    前言 该系列文章为本人刷leetcode的记录,主要旨在分享刷题的思路及算法解析(尽可能的一题多解),另方便自己日后查阅回顾.代码的实现语言是python和go. 想进大厂免不了刷题,一起加油吧,小伙 ...

  4. 剑指offer(04)重建二叉树

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

  5. 剑指offer(C++)-JZ7:重建二叉树(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点. ...

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

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

  7. 剑指offer没有java版吗_剑指Offer(Java版) 持续更新中

    面试题2 单例(之前有整理,略) 面试题3 二维数组中的查找 public boolean find(int target, int [][] array) { boolean found = fal ...

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

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

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

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

  10. 剑指offer java版 test42—找出和为S的两个数,左右夹逼法(双指针法)

    前言:受上一题的启发,这题自己也编出来了.在碰到这种有序数列的时候,经常会用到双指针法,一个指左边,一个指右边,然后依照规则移动,增加或缩小范围.很实用. 题目: 输入一个递增排序的数组和一个数字S, ...

最新文章

  1. 不知道这些,简历上千万不要说你会 Redis 持久化。。。
  2. 语音留言无法在电话上播放
  3. Sourcing Cockpit: 2. Demo of Service Purchase Order
  4. C#最简单最完整的webservice实例
  5. 你不懂js系列学习笔记-异步与性能- 02
  6. Python中的星号:用途及使用方法(下篇)
  7. 安全领域多位世界级权威的智慧结晶——《黑客新型攻击防范:深入剖析犯罪软件》...
  8. 盘点劳务公司和中介所的那些黑心套路
  9. Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
  10. 认真去做,我会做得很棒!
  11. apk注册机加密_apk软件添加注册机方法 安卓apk添加授权教程
  12. 【工具】聊聊文件传输工具,网页文件传输工具Snapdrop好用不
  13. 百度地图SDK集成定位,卫星地图
  14. 对序列化器、“对象”的理解
  15. 又十一了,唠唠程序员回家相亲那些段子
  16. 校园商铺项目 SSM迭代Spring Boot项目实战视频
  17. Android:通过systrace进行性能分析及使用-详细
  18. OO ALV中的data_changed、data_changed_finished事件介绍
  19. Mysql 新增分区,删除分区,合并分区
  20. 【机器学习】机器学习常见符号

热门文章

  1. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)
  2. python读取大文件csv内存溢出_Python,内存错误,csv文件太大
  3. 骨架提取的MATLAB实现
  4. jmeter学习指南之深入分析跨域传递cookie
  5. go context剖析之使用技巧
  6. 在Heroku上扩展ipify服务
  7. 《JavaScript启示录》——第1章 JavaScript对象 1.1创建对象
  8. saiku 3.8 二次开发代码整理步骤(20160727更新)
  9. 移动端手势操作--两点同时点击的实现方案
  10. leetcode Merge Two Sorted Lists