Как получить потомков до определенного уровня в дереве? - PullRequest
2 голосов
/ 22 ноября 2011

Какая Tree структура данных в Java позволяет выполнять запросы для разных уровней детей? Я посмотрел на TreeNode, JTree. Но, похоже, они не поддерживают многоуровневые запросы.

Учитывая Tree, для конкретного узла я хочу получить потомков до определенного уровня n. Есть ли существующая реализация, которую я могу использовать, или я должен написать свою собственную?

Спасибо!

Ответы [ 4 ]

1 голос
/ 23 ноября 2011

DefaultMutableTreeNode поддерживает несколько обходов, использование любого из них для достижения вашей цели оставлено (без каламбура, это по API :) пользователю.

1 голос
/ 22 ноября 2011

Нетрудно написать обход в ширину и посетить всех детей до определенного уровня. Вот какой-то псевдокод. Предположим, у вас есть новый класс:

public class NodeWithLevel {
    Node node;
    int level;
}

Этот класс является только оболочкой, используемой для этого алгоритма. Тогда метод "получить все узлы до уровня N" будет:

Queue<NodeWithLevel> queue;
queue.enqueue(<0, tree.root>);    
currentLevel = 0;
while(currentLevel < N) {
    NodeWithLevel current = queue.dequeue();
    currentLevel = current.level;
    // do whatever with current
    for(Node child: current.node.children) {
       queue.enqueue(<current.level + 1, child>);
    }        
}
0 голосов
/ 22 ноября 2011

Единственное, что приходит на ум - это свинг DefaultTreeModel, но это все равно потребует небольшого количества кода на вашей стороне, чтобы логика подняла детей до определенного уровня.

Не должно быть слишком сложно свернуть собственную реализацию.

0 голосов
/ 22 ноября 2011

Если вы не боитесь сложного API, вам может пригодиться DOM.Вы можете запросить его через XPath, применить события к его узлам и т. Д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...