You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

利用递归查找指定名称的父目录问题(含代码片段)

递归实现按目录名查找父目录的完整方案

我来帮你完善这个递归查找父目录的功能,结合你的需求(用ArrayList表示目录结构、未知目标深度、目标必定存在),我会给出完整的可运行代码并拆解关键逻辑:

第一步:定义Directory类结构

首先我们需要补全目录类的基础结构,包含名称和子目录集合:

import java.util.ArrayList;

class Directory {
    private String name;
    private ArrayList<Directory> children;

    public Directory(String name) {
        this.name = name;
        this.children = new ArrayList<>();
    }

    // Getter方法,供递归方法访问目录信息
    public String getName() {
        return name;
    }

    public ArrayList<Directory> getChildren() {
        return children;
    }

    // 辅助方法:添加子目录,方便构建测试用的目录树
    public void addChild(Directory child) {
        children.add(child);
    }
}

第二步:实现递归查找方法

根据你的需求,递归方法的核心逻辑是遍历当前目录的子目录,找到目标目录后返回当前目录(即父目录);如果当前目录的子目录里没有目标,就递归遍历每个子目录的子树,把找到的结果向上传递。这里我保留了你代码里的level参数(用来记录遍历层级,可选):

public class DirectoryFinder {
    private static Directory getParentDirectory(String targetDirName, Directory currentDirectory, int level) {
        // 可选:打印当前遍历的层级和目录,方便调试
        System.out.printf("遍历层级:%d,当前目录:%s%n", level, currentDirectory.getName());

        // 遍历当前目录的所有子目录
        for (Directory child : currentDirectory.getChildren()) {
            // 如果当前子目录就是我们要找的目标,返回当前目录(它的父目录)
            if (child.getName().equals(targetDirName)) {
                return currentDirectory;
            }
            // 递归查找子目录的子树
            Directory foundParent = getParentDirectory(targetDirName, child, level + 1);
            // 如果递归找到了结果,直接向上返回,不用继续遍历其他子目录
            if (foundParent != null) {
                return foundParent;
            }
        }
        // 题目说明目标必定存在,所以这个分支实际不会执行
        return null;
    }

    // 测试用例
    public static void main(String[] args) {
        // 构建一个示例目录树:根目录 -> 文档 -> 工作资料 -> 项目X
        Directory root = new Directory("根目录");
        Directory docs = new Directory("文档");
        Directory workFiles = new Directory("工作资料");
        Directory projectX = new Directory("项目X");

        root.addChild(docs);
        docs.addChild(workFiles);
        workFiles.addChild(projectX);

        // 查找"项目X"的父目录
        Directory parent = getParentDirectory("项目X", root, 0);
        System.out.println("目标目录的父目录是:" + parent.getName()); // 输出:工作资料
    }
}

关键逻辑拆解

  • 递归终止条件:当发现当前目录的某个子目录正好是目标目录时,直接返回当前目录(也就是目标的父目录)。
  • 递归遍历逻辑:对每个子目录递归调用方法,如果递归返回了非null的结果,说明在子树里找到了目标,直接把结果向上传递,避免无效遍历。
  • level参数的作用:如果不需要调试层级信息,可以直接去掉这个参数,简化方法签名为getParentDirectory(String targetDirName, Directory currentDirectory)。
  • 目标必定存在的保证:因为题目明确目标目录存在,所以最后返回null的分支不会被触发,无需处理找不到的异常情况。

内容的提问来源于stack exchange,提问作者omom007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:15:04