多叉树遍历-文件夹

递归算法的关键是如何处理当前层的数据,以及何时退出,想明白这两点,代码就好写了

package workFiles;

import java.util.LinkedList;

/**
 * 模拟文件类,包括文件夹和文件
 */
public class File {
    private LinkedList<File> folders;

    private LinkedList<String> files;

    public LinkedList<File> getFolders() {
        return folders;
    }

    public void setFolders(LinkedList<File> folders) {
        this.folders = folders;
    }

    public LinkedList<String> getFiles() {
        return files;
    }

    public void setFiles(LinkedList<String> files) {
        this.files = files;
    }
}
package workFiles;

import java.util.LinkedList;

public class WalkTree {

    public static void main(String[] a){
        LinkedList<File> list = new LinkedList<>();
        File f = createTree();
        list.add(f);
        while(list.size()!=0){
            readList(list);
        }
    }
    //处理堆
    static LinkedList<File> readList(LinkedList<File> list){
        //获取栈中最后的节点
        File f = list.removeLast();
        //如果当前节点存在文件夹
        if(f.getFolders()!=null&&f.getFolders().size()!=0){
            //去掉当前节点的文件夹
            File next = f.getFolders().removeLast();
            //重新存入当前节点
            list.add(f);
            //存入新节点
            list.add(next); 
        }
        else{
            if(f.getFiles()!=null&&f.getFiles().size()!=0){
                for(int i=0;i<f.getFiles().size();i++){
                    System.out.println(f.getFiles().get(i));
                }
            }

        }
        return list;
    }
    //模拟创建文件夹
    static File createTree(){
        File A =new File();
        File B =new File();
        File C =new File();
        LinkedList<String> str1 = new LinkedList<String>();
        str1.add("A文件1");
        A.setFiles(str1);

        LinkedList<String> str2 = new LinkedList<String>();
        str2.add("B文件1");
        str2.add("B文件2");
        B.setFiles(str2);

        LinkedList<String> str3 = new LinkedList<String>();
        str3.add("C文件1");
        str3.add("C文件2");
        str3.add("C文件3");
        C.setFiles(str3);
        LinkedList<File> temp = new LinkedList<File>();
        temp.add(B);
        temp.add(C);
        A.setFolders(temp);
        return A;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值