注:(1)java中树的构建

(2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的

 1 package com.xsf.SordForOffer;
 2
 3 import java.util.Arrays;
 4
 5 /*剑指offer第6个问题
 6  根据前序和中序遍历来重建二叉树
 7  */
 8 class BinaryTreeNode {
 9     public int value;
10     public BinaryTreeNode leftNode;
11     public BinaryTreeNode rightNode;
12 }
13
14 class ConstructCore {
15     /*
16      * 输入二叉树的前序遍历和中序遍历结果,重建二叉树并输出头节点 ex:12473568,47215386
17      */
18     public BinaryTreeNode constructCore(int[] preorder, int[] inorder)
19             throws Exception {
20
21         if (preorder == null || inorder == null) {
22             return null;
23         }
24         if (preorder.length != inorder.length) {
25             throw new Exception("长度不一样-非法输入");
26         }
27         BinaryTreeNode root = new BinaryTreeNode();
28         for (int i = 0; i < inorder.length; i++) {
29             if (inorder[i] == preorder[0]) {
30                 // isHave = true;
31                 root.value = inorder[i];
32                 root.leftNode = constructCore(
33                         Arrays.copyOfRange(preorder, 1, i + 1),
34                         Arrays.copyOfRange(inorder, 0, i));
35                 root.rightNode = constructCore(
36                         Arrays.copyOfRange(preorder, i + 1, preorder.length),
37                         Arrays.copyOfRange(inorder, i + 1, inorder.length));
38             }
39         }
40
41         return root;
42     }
43
44     public void lastOrderTraverse(BinaryTreeNode T) {
45         if (T != null) {
46             lastOrderTraverse(T.leftNode);
47             lastOrderTraverse(T.rightNode);
48             System.out.print(T.value);
49         }
50     }
51 }
52
53 public class Pro6Biconstruct {
54     public static void main(String[] args) throws Exception {
55         ConstructCore test = new ConstructCore();
56         int[] pre = { 1, 2, 4 };
57         int[] in = { 2, 1, 4 };
58         BinaryTreeNode root = test.constructCore(pre, in);
59         test.lastOrderTraverse(root);
60     }
61 }

转载于:https://www.cnblogs.com/xsfelvis/p/4394684.html

剑指offer面试题6 重建二叉树(java)相关推荐

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

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

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

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

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

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

  4. 剑指offer——面试题58:二叉树的下一个结点

    剑指offer--面试题58:二叉树的下一个结点 这个题要认真分析一下... Solution1: 自己想出来的破算法 /* struct TreeLinkNode {int val;struct T ...

  5. 剑指offer——面试题39:二叉树的深度

    剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...

  6. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径

    剑指offer--面试题25:二叉树中和为某一值的路径 参考网址:https://www.nowcoder.com/profile/5488508/codeBookDetail?submissionI ...

  7. 【递归】剑指offer——面试题19:二叉树的镜像

    剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...

  8. 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)

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

  9. [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]

    [问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...

最新文章

  1. Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学
  2. Nature Microbiology:肠道菌群如何划分肠型
  3. c++ 读文件 文件指针 继续读_FatFs文件系统使用笔记
  4. BOOL与bool的区别(bool不是c的关键字,c++中bool也不是int)
  5. Ansible-playbook简单应用的几个实例
  6. 后端技术:Spring Boot 项目优化和 JVM 调优,真实有效。
  7. centos7 RPM命令安装操作
  8. 为MongoDB添加身份验证
  9. Protocol Buffers proto语言语法说明
  10. SQL内部连接3个表?
  11. mysql分页合并同类项,人教版初三数学复习目录(全)
  12. 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day2)
  13. 高级OS(十五) - 中断机制以及中断上下部运行和内核代码分析
  14. ez_website
  15. docker-compose部署Redis-Cluster集群
  16. [LeetCode解题报告] LCP 48. 无限棋局
  17. 上海2021年高考成绩排位查询,2021年上海高考分数一分一段位次表,上海高考个人成绩排名查询方法...
  18. python学习-调用邮件接口发送邮件
  19. 微信公众号发送模版消息详细过程
  20. [活动召集]福建PHP社区聚会

热门文章

  1. golang读取文件编码转换问题
  2. 当有多个设备online时,命令行窗口通过adb连接指定设备方法
  3. hp eva 4400存储配置手记
  4. [sed] linux sed 批量替换字符串-转
  5. mysql中索引创建 查看和删除语句_MySQL索引的创建、删除和查看(学习中)
  6. 蓝桥杯 ADV-154 算法提高 质数的后代
  7. LeetCode 78. Subsets
  8. 【操作系统】存储器管理01-思维导图
  9. 打印十字图-蓝桥杯历届试题
  10. 【 Perl 】三种方式解决” Wide character in print “