遍历

【题解】求后序遍历

给你一囗甜甜゛ 提交于 2019-12-09 14:21:06
题目描述 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。 输入输出格式 输入格式: 共两行: 第一行为一个字符串,表示树的先序遍历; 第二行为一个字符串,表示树的中序遍历。 树的结点一律用小写字母表示。 输出格式: 一行,表示树的后序遍历序列。 输入输出样例 输入样例: abdec dbeac 输出样例: debca 这道题就是一道简单的模板题 首先可以设置一个index索引表,存放这棵树的每个字母在前序遍历中排哪个位置 可以这么想: 先在前序遍历中找出根,就是在index表中最小的那一个 然后就可以把这棵树的根找出来,分为两个子树 如图: 然后递归这个做法就可以了! 附代码: #include<iostream> #include<string> using namespace std; string pre,mid; int index[127]; void dfs(int low,int high) { if(low>high) return; int min=2147483647,root=0; for(register int i=low;i<=high;++i) { if(index[mid[i]]<=min) { min=index[mid[i]]; root=i; } } dfs(low,root-1); dfs(root+1,high); cout<

python 遍历文件夹下文件

梦想与她 提交于 2019-12-09 11:24:17
需求描述: 1、读取指定目录下的所有数据集文件 2、读取指定文件,输出文件数据 3、保存到指定目录 实现过程代码如下: # -*- coding: utf-8 -*- """ Created on Thu May 10 17:02:40 2018 @author: admin """ import os import pandas as pd import gc # 遍历指定目录,显示目录下的所有文件名 def eachFile(filepath): pathDir = os.listdir(filepath) allfilepath=list() for allDir in pathDir: child = os.path.join('%s%s' % (filepath, allDir)) allfilepath.append(child) return allfilepath #遍历目录下的所有文件 def readFile(filepath): samp=pd.DataFrame() for i in filepath: #读取的文件的文件类型 # df=pd.read_csv(open('%s'%i,encoding='UTF8')) df=pd.read_excel(r'%s'%i) df=df.loc[:,['资产订单编号','期数']] samp=pd.concat(

在Java8的foreach()中使用return/break/continue

本小妞迷上赌 提交于 2019-12-09 06:30:19
今天使用lambda表达式处理集合时,发现对return、break以及continue的使用有点迷惑,于是自己动手测试了一下,才发现在使用foreach()处理集合时 不能使用break和continue 这两个方法,也就是说不能按照普通的for循环遍历集合时那样根据条件来中止遍历,而如果要实现在普通for循环中的效果时,可以使用return来达到,也就是说如果你在一个方法的lambda表达式中使用return时,这个方法是不会返回的,而只是执行下一次遍历,看如下的测试代码: List<String> list = Arrays.asList("123", "45634", "7892", "abch", "sdfhrthj", "mvkd"); list.stream().forEach(e ->{ if(e.length() >= 5){ return; } System.out.println(e); }); 上述代码的输出结果是如下图所示: 可以看出 return起到的作用和continue是相同的 。 想知道这是为什么,在 Stack Overflow 中找到一个答案,主要是说foreach()不是一个循环,不是设计为可以用break以及continue来中止的操作。 ---------------------------------------------------

JAVA for和foreach 遍历的效率

做~自己de王妃 提交于 2019-12-09 06:27:58
for循环下标遍历 和 foreach 的原理比较 (JAVA) 今天看问答中又看到了类似的问题,就把自己理解过得写上来吧。去年看面试题也看到过,当时上网找没有搜到有说服力的。后来才弄明白并不是哪个一定好,是要分情况的。 首先需要提到一个很重要的接口:RandomAccess 。里面没有任何实现(标记接口),类似于序列化。作用在于: 能够选择最优的算法来完成随机或者顺序读写。 foreach的实现机制是利用Iterator,等价于: for (Iterator iterator = list.iterator();iterator.hasNext();){ sum += iterator.next(); } 下面简单举两个例子,用ArrayList存100万条数据,LinkedList存10万条数据。然后分别用for和foreah遍历。 其中ArrayList 是实现RandomAccess @Test public void forCompareForeach (){ List<Integer> list = new ArrayList<>( 1000000 ) ; for ( int i = 0 ; i< 1000000 ; i++){ //100万 list.add(i) ; } int temp = 0 ; long start1 = System.

为什么使用迭代器iterator遍历Linkedlist要比普通for快

僤鯓⒐⒋嵵緔 提交于 2019-12-09 05:52:30
</pre><p></p><pre name="code" class="java"> 大家可以搜索一下普通情况遍历linkedlist应该是O(n)但是使用iterator就是常数,这让我很好奇。于是我去查了源码。。 一路顺着找找到了 Collection ,确实有一个iterator但是是个interface还没有实现。 网上找list,有一个listiterator还是这样。 只能去linked找了,找到了如下源码 private static final class LinkIterator<ET> implements ListIterator<ET> { 61 int pos, expectedModCount; 62 63 final LinkedList<ET> list; 64 65 Link<ET> link, lastLink; 66 67 LinkIterator(LinkedList<ET> object, int location) { 68 list = object; 69 expectedModCount = list.modCount; 70 if (location >= 0 && location <= list.size) { 71 // pos ends up as -1 if list is empty, it ranges from

用foreach和Iterator遍历集合的方法

安稳与你 提交于 2019-12-09 05:50:07
package TestMap; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Created by Administrator on 2017/5/5. */ public class Main { public static void main(String[] args) { Map<Integer,Penguin> map = new HashMap<Integer,Penguin>(); map.put( 101 , new Penguin( "欧欧" , "Q仔" )); map.put( 102 , new Penguin( "丫丫" , "Q妹" )); map.put( 103 , new Penguin( "美美" , "Q妹" )); map.put( 104 , new Penguin( "菲菲" , "Q妹" )); Set keys = map.keySet(); System. out .println( "foreach方法的遍历结果为:" ); for (Object key:keys) { Penguin value = (Penguin) map.get(key); System.

iterator、for遍历集合的优缺点

柔情痞子 提交于 2019-12-09 05:49:50
对于在内存中存储空间为连续的集合,如ArrayList、数组,可以采用以下三种方式进行遍历: 1、iterator 迭代器遍历方式, 适用于连续内存存储方式,比如数组、 ArrayList(其实 ArrayList底层实现也是数组形式)。 缺点是只能从头开始遍历, 优点是可以边遍历边删除。 例如: Iterator iter = list.iterator(); while(iter.hasNext()){ Object o = iter.next(); if(o.equals("a")){ iter.remove(); } } 2、for each遍历 底层实现也是基于iterator,所以也只能从头开始遍历,性能上比iterator要稍慢一些,因为多了一层类型自动转换。 3、for list.size方式遍历 这种方式遍历比较灵活,可以指定位置开始遍历。性能最高,但是使用不太优雅,每次都需要在应用程序中手动强转和额外的获得list.size,这样就会导致产生额外的代码。 基于for方式的遍历,还有一个缺点就是遍历过程中不允许删除元素,否则会抛ConcurrentModificationException。 如下: ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add("b");

对数据遍历的三种方式之foreach 、for与Iterator

给你一囗甜甜゛ 提交于 2019-12-09 05:49:38
对数据的遍历方式有三种: for 循环遍历、 增强 for 循环遍历、 Iterator 迭代器遍历。这三种遍历方式有他们自身使用的范围。 增强 for 循环 增强 for 循环是 JDK1.5 版本后出来的一个高级 for 循环,是用来专门遍历数组和集合的。内部原理其实是一个迭代器 遍历也就是我们常说的 foreach 遍历。 格式: for (元素的数据类型 变量 : 集合 or 数组) 应用一: 利用常用的for循环遍历数组 : //利用传统方式进行遍历 int[] arr={1,2,3,4,5}; for (int i = 0; i < arr.length; i++) { System.out.println(i); } 有了增强for循环后,方便了我们进行遍历 int[] arr = new int[]{11,22,33}; for (int n : arr) {//变量n代表被遍历到的数组元素 System.out.println(n); } for (int n : arr) //变量n代表被遍历到的数组元素,类型是int 变量类型可以是n也可以是自己定义的任意变量名 原理:我们是将数组中的元素给了n,然后对n进行输出。 增强for循环和for循环的区别: 1.增强for循环只能遍历集合和数组,for循环最基本的遍历方式,除了集合和数组也可以用于其他遍历 2

foreach遍历和iterator遍历用法比较

白昼怎懂夜的黑 提交于 2019-12-09 05:47:31
for循环遍历是最基层的,这里就不赘述了 1. 主要差别 foreach可用于遍历任何集合或数组,而且操作简单易懂,他唯一的不好就是需要了解集合内部类型 iterator是最强大的,他可以随时修改或者删除集合内部的元素,并且是在不需要知道元素和集合的类型的情况下进行的 2.foreach的用法 //利用froeach语句输出集合元素 System.out.println("----2----froeach语句输出集合元素"); for (String x : list) { System.out.println(x); } foreach的语句格式: for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句; } 3.iterator用法 for(Iterator it = allString.iterator(); it.hasNext();){ //便利arrylist String str = (String)it.next(); //将list中的元素转为str遍历给String } 查看源码, Iterator类,此类定义了三个方法: package com.codejavafun.iterator; public interface Iterator { Object next(); boolean hasNext(); public void