java实现——006重建二叉树
public class T006 {
public static void main(String[] args){
int pre[] = {1,2,4,7,3,5,6,8};
int in[] = {4,7,2,1,5,3,8,6};
preorderTraversalRec(construct(pre,in,8));
}
public static void preorderTraversalRec(TreeNode root) {
if (root == null) {
return;
}
System.out.print(root.val + " ");
preorderTraversalRec(root.left);
preorderTraversalRec(root.right);
}
public static TreeNode construct(int[] pre,int[] in,int length){
if(pre == null ||in == null||length<=0)
return null;
return constructCore(pre,in,0,length-1,0,length-1);
}
public static TreeNode constructCore(int[] pre,int[] in,int startPre,int endPre,int startIn,int endIn){
int rootValue = pre[startPre];
TreeNode root = new TreeNode(rootValue);
root.left = null;
root.right = null;
if(startPre == endPre){
if(startIn == endIn&&startPre==startIn){
System.out.println("root");
return root;
}
}
int rootIn = startIn;
while(rootIn<=endIn&&in[rootIn]!=rootValue){
++ rootIn;
}
if(rootIn == endIn&&in[rootIn]!=rootValue){
System.out.println("Invalid input2");
}
int leftLength = rootIn - startIn;
int leftPreEnd = startPre + leftLength;
if(leftLength>0){
root.left = constructCore(pre,in,startPre+1,leftPreEnd,startIn,rootIn-1);
}
if(leftLength<endPre-startPre){
root.right = constructCore(pre,in,leftPreEnd+1,endPre,rootIn+1,endIn);
}
return root;
}
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
}
java实现——006重建二叉树的更多相关文章
- java基础编程——重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer面试题6 重建二叉树(java)
注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...
- 剑指offer【04】- 重建二叉树(java)
题目:重建二叉树 考点:树 题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6, ...
- 【Java】 剑指offer(6) 重建二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的 ...
- 剑指Offer-4.重建二叉树(C++/Java)
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2 ...
- 剑指offer编程题Java实现——面试题6重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- Java 重建二叉树 根据前序中序重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- 重建二叉树(JAVA)
重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历 ...
- 【剑指offer】 Java实现重建二叉树
GitHub上的代码链接 /** * @Author: DaleyZou * @Description: 重建二叉树 * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. * 假设输入的前序 ...
随机推荐
- [原]JavaScript总结
匿名函数 var ff = function () { return 'hhqybsl'; }; var result = ff(); ...
- 用cas来实现php的单点登陆
最近项目中需要做单点登录,客户端包含Java.ruby和PHP,java有几个应用程序,php是discuz+supesite+ucenter,配置步骤如下: 1.cas服务端:下载地址:http:/ ...
- PAT乙1003
这次终于觉得智商不够用了,特么的. 总结给你的经验,对于这样字符串的题目,经常会出现一种叫做递归定义的东西. 还有一种叫做,相同的字母表示相同的字符串. 这道题目一共有三个条件. 1. 字符串中必须仅 ...
- 在线更新问题 HDU5877 线段树
题目大意:给你一棵树,有n-1条边,每条边都有方向,每个顶点有权值,给出weak pair的定义是val[u]*val[v] <=k,u是v的祖先,问有多少对这样的顶点 思路:创建线段树,通过d ...
- Java BufferedReader、InputStream简介
InputStream 数据流类 一般来说,就是将字符串.管道数据(socket通倒).文件.字节等转换为输入流,以流的方式去读取: 但是inputstream的读取速率较低,为了提高读取速率,一般 ...
- C# 经典入门15章-TextBoxControl
第一步:设计界面如下:
- HDU1425 <sort 快排>
给你n个整数,请按从大到小的顺序输出其中前m大的数. 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,5000 ...
- .NET程序默认启动线程数
问:一个.NET程序在运行时到底启动了多少个线程? 答:至少3个. 启动CLR并运行Main方法的主线程 调试器帮助线程 Finalizer线程 class Program { static void ...
- git log 查看 当前分支的 提交历史
git log 查看 当前分支的 提交历史 在提交了若干更新之后,想回顾下提交历史,可以使用 git log 命令查看 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排 ...
- Android学习笔记之ContentProvider
读取其他应用程序共享的数据 以下示例为读取联系人信息 package com.jiahemeikang.helloandroid; import com.jiahemikang.service.Ech ...