第四题:根据前序和中序遍历结果重建二叉树(Arrays常用方法)
来源:互联网 发布:紫萱和徐长卿知乎 编辑:程序博客网 时间:2024/06/05 20:45
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
方法一:利用递归的方法,前序遍历的第一个节点是根,以这个节点在中序遍历找,左边是左子树,右边是右子树。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */import java.util.Arrays;public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { if(pre.length<1 || in.length<1) return null; TreeNode treeNode = new TreeNode(pre[0]); for(int i=0;i<pre.length;i++){ if(pre[0] == in[i]){ treeNode.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i+1),Arrays.copyOfRange(in, 0, i)); treeNode.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i+1, pre.length),Arrays.copyOfRange(in, i+1, in.length)); } } return treeNode; }}
知识补充:Arrays(数组)常用方法用法:import java.util.Arrays; Arrays.方法
方法:
1、sort() 默认升序
默认由小到大排序,不只对于数值型的可以排序,对于字符串等也都可以进行排序
重写Conparator实现降序,返回正数,就会对调这两个数,这里也就是,如果o2>o1,降序的话要对调的
Arrays
.sort(list,
new
Comparator<Integer>() {
public
int
compare(Integer o1, Integer o2) {
return
o2 - o1;
}
});
如果是ArrayList或者Linkedlist把
import java.util.Collections; Arrays改成Collections.sort
二维数组排序,记得看下滴滴的俄罗斯套娃问题
2、binarySearch()
对已排序(从小到大排序的)的数组进行二元搜索,如果找到指定的值就返回其所在的索引位置,否则返回负值
3、fill()
将数组的元素全部设定为指定的值
4、equals()
比较两个数组元素中的元素值是否全部相等,如果是返回true,否则返回false,适用于一维数组,多维数组用deepEquals()用法同equals;
5、deepEquals()
对多维数组进行比较其内容是否一致,不能用于一维数组,会编译不过滴~
6、toString(int[] a)
返回指定数组内容的字符串表示形式。
7、copyOf(int[] original, int newLength)
复制指定的数组,截取或用 0 填充(不足用0补齐),以使副本具有指定的长度。
8、copyOfRange(int[] original, int from, int to) 这里用到的方法
将指定数组的指定范围复制到一个新数组。
9、asList(array)
利用Arrays.asList(array)将返回一个List,然而这个返回的List并不支持add和remove的操作。返回的List进行添加或删除时将会报 java.lang.UnsupportedOperationException 异常。
原因:在Arrays.asList中,该方法接受一个变长参数,一般可看做数组参数,但是因为基本数据类型,如int[] 本身就是一个类型,所以data变量作为参数传递时,编译器认为只传了一个变量,这个变量的类型是int数组,所以size为1。
因为是arrays.aslist中,看代码可以看到这里返回的ArrayList不是原来的传统意义上的java.util.arraylist了,而是自己工具类的一个静态私有内部类,并没有提供add方法,要自己实现,所以这里是出错了,因此,除非确信array.aslist后长度不会增加,否则谨慎使用:List abc=Arrays.asList("a","b","c"),因为这样的长度是无法再add的了
- 第四题:根据前序和中序遍历结果重建二叉树(Arrays常用方法)
- 根据前序遍历和中序遍历结果重建二叉树(递归方法)
- 重建二叉树---根据前序和中序遍历结果重建二叉树
- 根据二叉树的前序遍历和中序遍历的结果,重建二叉树
- 重建二叉树(根据前序和中序遍历结果)
- 根据前序和中序遍历结果重建二叉树
- 根据中序和前序遍历重建二叉树
- 根据前序和中序遍历重建二叉树
- 根据二叉树的前序遍历和中序遍历结果重建出该二叉树
- 根据二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
- (剑指offer笔记)根据前序遍历和中序遍历重建二叉树
- 面试题6:重建二叉树(根据前序遍历和中序遍历)
- Python练手之根据前序和中序&根据中序和后序重建二叉树,输出前序、中序和后序遍历结果
- 根据前序遍历、中序遍历重建二叉树
- 根据二叉树的前序遍历和中序遍历重建二叉树
- 根据前序,中序遍历重建二叉树
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- 根据前序遍历和中序遍历重建二叉树的Java实现
- hibernate的@Transient注解
- Android Studio中Gradle's dependency cache may be corrupt解决记录
- 一人千面:谈谈Go语言中的type
- IDEA 服务器搭建 IDEA授权服务器
- Java数据类型-Queue
- 第四题:根据前序和中序遍历结果重建二叉树(Arrays常用方法)
- J2EE进阶之javascript 三
- microsoft word中在公式后插入可交叉引用的公式编号
- spring OAuth 2 Developers Guide 英译汉
- ARP协议与RARP协议
- OSGI企业应用开发(九)整合Spring和Mybatis框架(二)
- 使用SpringBoot yml配置文件(三)
- Java基础——overload(重载)与overwrite(重写)的区别
- 机器学习实战-第三章(决策树)