首页 > 代码库 > Java非递归遍历树算法---以遍历文件为例

Java非递归遍历树算法---以遍历文件为例

在网上看到的算法,跟之前自己写的一个非遍历算法类似,先记录下来。

非递归:

import java.io.File;import java.util.LinkedList;public class FileSystem {    public static void main(String[] args) {                long a = System.currentTimeMillis();                LinkedList list = new LinkedList();        File dir = new File("c:\\java\\");        File file[] = dir.listFiles();        for (int i = 0; i < file.length; i++) {            if (file[i].isDirectory())                list.add(file[i]);            else                System.out.println(file[i].getAbsolutePath());        }        File tmp;        while (!list.isEmpty()) {            tmp = list.removeFirst();            if (tmp.isDirectory()) {                file = tmp.listFiles();                if (file == null)                    continue;                for (int i = 0; i < file.length; i++) {                    if (file[i].isDirectory())                        list.add(file[i]);                    else                        System.out.println(file[i].getAbsolutePath());                }            } else {                System.out.println(tmp.getAbsolutePath());            }        }                System.out.println(System.currentTimeMillis() - a);    }}

递归:

import java.io.File;import java.util.ArrayList;public class FileSystem1 {    private static ArrayList filelist = new ArrayList();         public static void main(String[] args) {                long a = System.currentTimeMillis();        refreshFileList("c:\\java");        System.out.println(System.currentTimeMillis() - a);    }    public static void refreshFileList(String strPath) {         File dir = new File(strPath);         File[] files = dir.listFiles();                 if (files == null)             return;         for (int i = 0; i < files.length; i++) {             if (files[i].isDirectory()) {                 refreshFileList(files[i].getAbsolutePath());             } else {                 String strFileName = files[i].getAbsolutePath().toLowerCase();                System.out.println("---"+strFileName);                filelist.add(files[i].getAbsolutePath());                                }         }     }}

来源不详,据说是递归的效率高。。。。心碎