技术标签: 剑指offer 算法 二叉树 leetcode 动态规划 数据结构
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
题目分析
因为是树的结构,一般都是用递归来实现。
用数学归纳法的思想就是,假设最后一步,就是root的左右子树都已经重建好了,那么我只要考虑将root的左右子树安上去即可。
根据前序遍历的性质,第一个元素必然就是root,那么下面的工作就是如何确定root的左右子树的范围。
根据中序遍历的性质,root元素前面都是root的左子树,后面都是root的右子树。那么我们只要找到中序遍历中root的位置,就可以确定好左右子树的范围。
正如上面所说,只需要将确定的左右子树安到root上即可。递归要注意出口,假设最后只有一个元素了,那么就要返回。
import java.util.Arrays;
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
//数组长度为0的时候要处理
if(pre.length == 0){
return null;
}
int rootVal = pre[0];
//数组长度仅为1的时候就要处理
if(pre.length == 1){
return new TreeNode(rootVal);
}
//我们先找到root所在的位置,确定好前序和中序中左子树和右子树序列的范围
TreeNode root = new TreeNode(rootVal);
int rootIndex = 0;
for(int i = 0; i < in.length ; i++){
if(rootVal == in[i]){
rootIndex = i;
break;
}
}
//递归,假设root的左右子树都已经构建完毕,那么只要将左右子树安到root左右即可
//这里注意Arrays.copyOfRange(int[],start,end)是[)的区间
root.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,rootIndex+1), Arrays.copyOfRange(in, 0, rootIndex));
root.right = reConstructBinaryTree(Arrays.copyOfRange(pre,rootIndex+1,pre.length),Arrays.copyOfRange(in,rootIndex+1,in.length));
return root;
}
}
接上篇第3章的3.10MapReduce第三天:MapTask、ReduceTask机制、OutputFormat数据输出、Join应用、MapReduce Join、计数器应用、数据清洗ETL、MapReduce开发总结本文目录第4章Hadoop数据压缩4.1概述4.2MR支持的压缩编码4.3压缩方式选择4.3.1Gzip压缩4.3.2Bzip2压缩4.3.3Lzo压缩4.3....
java可以利用编写mbeans来暴露很多程序指标,jdk自己也有很多指标,例如内存使用以及划分。很多小伙伴都表示这些值不少jstat就可以获取查看的吗,ssh登录上去就可以,也很方便。jstat确实不错,但是他在内存的信息暴露上是缺失的,没有直接内存的使用。在现在的程序中,直接内存的使用已经不是什么稀有操作了。我们应该如何查看呢?jmx暴露了这个指标。很多程序的指标也在这里暴露,例如spark等..._ava jmx 开启_动态开启jmx服务
不知道怎么了,今天坐在电脑前面就想写写代码了。废话不多说。正如题目所说:输入一堆数值,求平均值,最大值,最小值,和代码直接粘上: Scanner input = new Scanner(System.in); String [] str = input.nextLine().split(" "); int [] count = new int[str.length]; f
1 程序要求2 程序目录及文件结构说明:A 程序运行前,需事先建立好用户json文件及测试用用户家目录B 先运行服务器端程序,后运行客户端程序C 由于时间不充裕,最后一条要求未能完成,还有就是尽量输入正确的文件名或路径,否则程序会跳出(除输入多个“\”会产生问题外,还没有测试其它特殊符号)3 服务器代码#!/usr/bin/env python# --author lishen..._ftpserver((ip, port), handler)
维基百科:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。一、文件描述符概念 Linux 系统中,把一切都看做是文件,当进程打开现有文...
yarn安装详细教程说明、升级教程、修改yarn的全局和缓存目录、yarn基本命令_yarn 升级
Brutexss是一款python2编写的脚本工具,这款脚本能够自动进行xss的插入,也可以自定义攻击载荷。Brutexss脚本原理:(编写此文章,方便我之后的回顾以及帮助各位游客理解brutexss的原理)def brutexss(): ... def again():... def wordlistimport(file, lst):... ...
启动VMware时,打开虚拟机,显示没有相关服务,进入服务中,如果有VMware authorization service这一项,就手动打开,如果没有VMware authorization service这一项,打开命令提示符,黑屏输入:sc create VMAuthdService binpath= “D:\VMware\vmware-authd.exe”D:\VMware\vmw..._输入;sc create vmauthdservice binpath= “d:\vmware\vmware-authd.exe”。
https://cloud.tencent.com/developer/article/1382055
对应示例程序:measure_ic_leads.hdev目标:测量IC脚的长度,以及IC管脚的宽度和彼此之间的距离思路为:这个例程主要是学习一维测量的几个核心算子: gen_measure_rectangle2 – 一维矩形测量句柄 measure_pos --检测区域内垂直于长轴..._芯片引脚宽度
启动线程:CWinThread* AfxBeginThread( 线程函数,this ); 线程的退出:在刚刚使用的时候,退出线程的方法有问题,导致退出的时候异常。下面说线程退出的方法:1. 线程函数返回线程都在死循环中,当满足一定条件时,return,也会将线程结束。2. AfxEndThread这个函数只能用在线程函数中,当满足一定条件是,调_afxendtread
Error:(Error -1156 @ 0x0)Device may be operating in low-power mode. Do you want to bring it out of this mode? Choose ‘Yes’ to force the device to wake up and retry the operation. Choose ‘No’ to retry the operation without waking the device.(Emulation p._(error -1156 @ 0x0) device may be operating in low-power mode. do you want t