Я создал структуру, чтобы представить простое дерево, как это:Счетные потомки в дереве
A
/\
B C
/\/\
D E F G
Каждый узел представляет собой запись, которая является мой собственный класс с некоторыми полями внутри. В следующем примере упрощается только поле, содержащее дочерние узлы. Когда список пуст, мы имеем листовой узел.
Моя цель - написать функцию, которая возвращает ВСЕ потомки данного узла.
Это код, который я написал:
public static void main(String[] args) {
HashMap<String, Record> treeMap = new HashMap<String, Record>();
treeMap.put("A", new Record(new LinkedList<String>(Arrays.asList("B","C"))));
treeMap.put("B", new Record(new LinkedList<String>(Arrays.asList("D", "E"))));
treeMap.put("C", new Record(new LinkedList<String>(Arrays.asList("F", "G"))));
treeMap.put("D", new Record(new LinkedList<String>()));
treeMap.put("E", new Record(new LinkedList<String>()));
treeMap.put("F", new Record(new LinkedList<String>()));
treeMap.put("G", new Record(new LinkedList<String>()));
System.out.println(descendantsRN("A", treeMap));
}
public static LinkedList<String> descendantsRN(String rn, HashMap<String, Record> map)
{
LinkedList<String> result = null;
if(map.get(rn).getListOfChildren()!= null)
{
result = map.get(rn).getListOfChildren();
LinkedList<String> children = map.get(rn).getListOfChildren();
for (String child : children) {
descendantsRN(child , map);
}
}
return result;
}
проблема заключается в следующем: когда я печатаю из потомков в примере выше, я получил только В и С, вместо B, C , D, Е, F, G. Я не понимаю, почему это неправильно. Где ошибка и как я могу это решить?
Это сложная сложность для того, что должно быть относительно простым. Вы не указали источник для 'Record', но я подозреваю, что ему нужно много рефакторинга. –
Запись не имеет значения. Он содержит всего 3 поля, заполненных строками. Я избегал делать более полный текст всего кода. – user840718