Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从给定的HashMap构造树_Java_Loops - Fatal编程技术网

Java 从给定的HashMap构造树

Java 从给定的HashMap构造树,java,loops,Java,Loops,我想遍历一个HashMap映射,并从该映射构建一棵树。例如,我有以下映射:1=[2,3],2=[3,4],3=[1,5],4=[2,5],5=[1,4]。我要做的是以以下方式遍历此地图: public static Tree getTree (HashMap<Integer, ArrayList<Integer>> paths) { Tree<Integer> tree = new Tree(-1); Integer node; f

我想遍历一个
HashMap映射
,并从该映射构建一棵树。例如,我有以下映射:1=[2,3],2=[3,4],3=[1,5],4=[2,5],5=[1,4]。我要做的是以以下方式遍历此地图:

public static Tree getTree (HashMap<Integer, ArrayList<Integer>> paths) {

    Tree<Integer> tree = new Tree(-1);
    Integer node;

    for (int i = 1; i <= paths.size(); i++) {

        for (int j = 0; j < paths.get(i).size(); j++) {

            node = paths.get(i).get(j);
            tree.addLeaf(i, node);

            for(int k = 0; k < paths.get(node).size(); k++) {

                tree.addLeaf(node, paths.get(node).get(k));
                node = paths.get(node).get(k);

                // now I have to go to paths.get(node) and receive its ArrayList

                for (int t = 0; t < paths.get(node).size(); t++) {

                      tree.addLeaf(node, paths.get(node).get(t));
                      node = paths.get(node).get(t);


                }

            }
        }
    }

    return tree;
}
公共静态树getTree(HashMap路径){
树=新树(-1);
整数节点;

对于(int i=1;i使用递归遍历映射,将当前状态作为参数传递给递归方法:

public void step(Map<Integer, List<Integer>> tree, List<Integer> nodes, Integer key) {
    if (nodes.contains(key)) {
        // skip node which we already processed
        return;
    }
    nodes.add(key);

    List<Integer> children = tree.get(key);
    // add sanity checks here if you expect inconsistent data
    for (Integer child : children) {
        step(tree, nodes, child);
    }
}

嗯,我正在努力理解你的最终目标。请详细说明。如果你发布真实的代码来复制它,而不是非编译伪代码,那么理解你的问题会容易得多。
step(map, tempList, 1);