java - 数据结构帮助 - 理解思维过程

标签 java arrays recursion data-structures

public class Example {

    private static class Courses {
        public final String name;
        public final Courses[] children;

        public Courses(String name, Courses ... children) {
            this.name = name;
            this.children = children;
        }
    }

    public static void main(String[] args) {


        Courses courses =
                new Courses("School",
                        new Courses("Mathematics",
                                new Courses("Algebra"),
                                new Courses("Trig"),
                                new Courses("Calculus"),
                                new Courses("Calculus 2"),
                                new Courses("Geometry")),
                        new Courses("Sciences",
                                new Courses("Biology"),
                                new Courses("Chemistry"),
                                new Courses("Physics"),
                        new Courses("Business",
                                new Courses("Finances",
                                        new Courses("Accounting"),
                                        new Courses("Accounting 1"),
                                        new Courses("Accounting 2"),
                                new Courses("Administration",
                                        new Courses("Economics"),
                                        new Courses("Business Studies"),
                                        new Courses("Administration 1"),
                                        new Courses("Accounting"))),
                        new Courses("Physical Education"))));


                    System.out.println(find(courses, "Economics", courses.name));

        public static String find(Courses courses, String name, String currentPath) {

        if((courses.name).equals(name)){

            System.out.println(currentPath);

            return currentPath + " / " + name;

        }
        else{
            //System.out.println(currentPath);
            for(Courses child:courses.children){

                currentPath += " / " + child.name;

                find(child, name, currentPath);
            }

        }

        return currentPath + " / " + name;

    }
}

这就是我获得的代码。我试图确定在编写此查找类(class)方法时正确的思维模式应该是什么。这是一个数组,但我像树一样思考它并试图找到答案。你们也会这么做吗?我正在尝试找到一条像这所学校/商业/行政/经济这样的道路。但要么我得到整个路径,要么它迭代整个过程。另外,你们将采取什么方法来实现这一目标。我写了一个递归方法来实现这一点,但它不起作用。

谢谢你的帮助

抄送

最佳答案

将其视为一棵树显然是正确的方法,因为它确实是一棵树。

如果courses的当前值是您想要的节点的父节点,它可能会帮助您思考您期望该方法执行的操作。这就是您的情况,如果它是管理节点。在您当前的实现中,您将迭代所有子项,却从未意识到您找到了正确的子项!

作为另一个提示,您通常会在递归中希望对递归调用的结果执行某些操作。在您的代码中,您调用 find(child, name, currentPath) ,然后对结果不执行任何操作!

希望这些提示对您有所帮助。

关于java - 数据结构帮助 - 理解思维过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033248/

相关文章:

java - 我们可以对 JPA 标准表达式进行左填充吗?

java - 如何从同一类的另一个对象调用变量

java - Tomcat 后台线程启动两次?

c - C中递归二进制搜索算法中的段错误

recursion - 500次递归调用是不是太多了?

java - 递归搜索数组 - CodingBat

java - java中列表的情况下使用jackson json反序列化错误

php - 如何使用 PHP 制作大数组 (26000 x 26000)?

javascript - 获取数组元素的索引号

php - 循环多维数组以输出 uniq 数字的列表