我有一棵树,我希望使用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 ...
请参阅以下解决方案:
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);
}
}
}
}
}