剑指offer面试题6 重建二叉树(java)
注:(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)相关推荐
- 剑指offer面试题[6]-重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指Offer - 面试题7. 重建二叉树(递归)
1. 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍 ...
- 剑指offer面试题07. 重建二叉树(递归)(切片)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 思路 详见链接 代码 #class TreeNode: # def __ini ...
- 剑指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_面试题6_重建二叉树(分解步骤,逐个击破)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如:输入前序遍历 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7 ...
- [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
[问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...
最新文章
- Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学
- Nature Microbiology:肠道菌群如何划分肠型
- c++ 读文件 文件指针 继续读_FatFs文件系统使用笔记
- BOOL与bool的区别(bool不是c的关键字,c++中bool也不是int)
- Ansible-playbook简单应用的几个实例
- 后端技术:Spring Boot 项目优化和 JVM 调优,真实有效。
- centos7 RPM命令安装操作
- 为MongoDB添加身份验证
- Protocol Buffers proto语言语法说明
- SQL内部连接3个表?
- mysql分页合并同类项,人教版初三数学复习目录(全)
- 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day2)
- 高级OS(十五) - 中断机制以及中断上下部运行和内核代码分析
- ez_website
- docker-compose部署Redis-Cluster集群
- [LeetCode解题报告] LCP 48. 无限棋局
- 上海2021年高考成绩排位查询,2021年上海高考分数一分一段位次表,上海高考个人成绩排名查询方法...
- python学习-调用邮件接口发送邮件
- 微信公众号发送模版消息详细过程
- [活动召集]福建PHP社区聚会
热门文章
- golang读取文件编码转换问题
- 当有多个设备online时,命令行窗口通过adb连接指定设备方法
- hp eva 4400存储配置手记
- [sed] linux sed 批量替换字符串-转
- mysql中索引创建 查看和删除语句_MySQL索引的创建、删除和查看(学习中)
- 蓝桥杯 ADV-154 算法提高 质数的后代
- LeetCode 78. Subsets
- 【操作系统】存储器管理01-思维导图
- 打印十字图-蓝桥杯历届试题
- 【 Perl 】三种方式解决” Wide character in print “