如何使用Java的深度优先搜索显示树(给定顺序)?]

问题描述 投票:0回答:1

我有一棵树,我希望使用DFS算法在其中显示从初始节点(根)到所有叶子的树。简单起见,我的数据库是::>

                   root    id_son      id_parent
                    1      2          -
                    1      3          2
                    1      5          2
                    1      6          5   

我想将我的桌子显示为同伴:[1,2,3,5,6]这是我的实现:

public class DFSTree {

    public static ArrayList<Integer> listeIDsOrder = new ArrayList();

    public static void main (String[] args){
        HashMap<Integer, Integer> map = new HashMap();
        map.put (266773, -99);

        map.put (266774, 266773);
        map.put (284640, 266774);
        map.put (284642, 266774);
        map.put (284644, 266774);

        map.put (266778, 266773);
        map.put (266780, 266778);
        map.put (266793, 266778);

        map.put (266798, 266773);
        map.put (266799, 266798);

        getIDsOrder (266773, map);
        System.out.println (listeIDsOrder);
    }

    public static void getOrder (int node, HashMap<Integer, Integer> map){

        ArrayList<Integer> cles = new ArrayList();
        cles.addAll(map.keySet());
        Collections.sort(cles);

        if (!listeIDsOrder.contains(node)) 
            listeIDsOrder.add(node);

        for (int cle : cles)
            if (map.get(cle) == node)
                getOrder (cle, map);

    }

}

因此,我得到一个随机排序的列表。知道我哪里出错了吗?

我有一棵树,我希望使用DFS算法在其中显示从初始节点(根)到所有叶子的树。为简单起见,我的数据库与之相同:root id_son ...

java hashmap binary-search-tree nodes depth-first-search
1个回答
0
投票

请参阅以下解决方案:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class DFSTree {

    public static ArrayList<Integer> listeIDsOrder = new ArrayList<>();

    public static void main (String[] args){
        Map<Integer, Integer> map = new HashMap<>();

        map.put (1, null);   //root
        map.put (10, 1);
        map.put (11, 10);
        map.put (12, 10);
        map.put (13, 10);

        map.put (20, 1);
        map.put (21, 20);
        map.put (22, 20);

        map.put (30, 1);
        map.put (31, 30);

        getOrder (1, map);
        System.out.println (listeIDsOrder);
    }

    public static void getOrder (int root, Map<Integer, Integer> graph){

        LinkedList<Integer> stack = new LinkedList<>(); //use stack for correct order of processing
        stack.add(root); //add root
        getOrder(graph, stack);
    }

    public static void getOrder (Map<Integer, Integer> graph, LinkedList<Integer> stack ){

        while(!stack.isEmpty()){

            int node =  stack.pollFirst(); //for bfs order. for dfs order use stack.pollLast();
            listeIDsOrder.add(node);

             List<Integer> keys = new ArrayList<>(graph.keySet());
             Collections.sort(keys);

            for(int key : keys){
                if(graph.get(key) != null && graph.get(key) == node) {
                    stack.add(key);
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.