Mind.js предоставляет гибкую структуру для работы с графами узлов и их связями, позволяя создавать, визуализировать и обрабатывать сложные структуры данных. Traversal (обход) по графу узлов — одна из ключевых операций при анализе и манипуляции графовых структур.
В библиотеке Mind.js поддерживаются два основных типа обхода графа:
Обход в глубину (Depth-First Traversal) Алгоритм
DFS используется для исследования графа по «ветвям» до тех пор, пока не
будут достигнуты все возможные узлы в текущем пути. В Mind.js DFS
применяется через метод traverseDepthFirst, который
принимает корневой узел и колбэк-функцию для обработки каждого узла.
Пример синтаксиса:
mindGraph.traverseDepthFirst(rootNode, node => {
console.log(node.data);
});
Ключевые моменты DFS в Mind.js:
false
из колбэка.Обход в ширину (Breadth-First Traversal) BFS
проходит граф по уровням, начиная с корня и постепенно переходя к
смежным узлам. Mind.js реализует BFS через метод
traverseBreadthFirst.
Пример использования:
mindGraph.traverseBreadthFirst(rootNode, node => {
console.log(node.data);
});
Особенности BFS:
Mind.js позволяет тонко настраивать процесс traversal:
Фильтрация узлов Передача функции фильтрации позволяет обходить только узлы, удовлетворяющие заданным условиям.
mindGraph.traverseDepthFirst(rootNode, node => {
if (node.type === 'task') {
console.log(node.data);
}
});Контроль посещённых узлов Для предотвращения
циклических зацикливаний Mind.js автоматически ведёт список посещённых
узлов, но можно управлять этим вручную, передавая свой объект
visited.
Порядок обхода дочерних узлов Mind.js поддерживает сортировку дочерних узлов перед их обработкой:
mindGraph.traverseDepthFirst(rootNode, node => {
console.log(node.data);
}, { sortChildren: (a, b) => a.priority - b.priority });Графы с циклами Traversal корректно работает на графах с циклами благодаря встроенному отслеживанию посещённых узлов. Без этого обход мог бы войти в бесконечный цикл.
Множественные корни Если граф имеет несколько независимых подграфов, можно инициировать traversal с массива корней:
rootNodes.forEach(root => {
mindGraph.traverseBreadthFirst(root, node => {
console.log(node.data);
});
});Прерывание обхода Возврат false из
колбэка мгновенно прекращает обход текущей ветви (DFS) или уровня (BFS),
что удобно при поиске конкретного узла.
Traversal в Mind.js используется для:
Traversal в Mind.js обеспечивает полный контроль над процессом обхода графа, позволяя реализовать сложные алгоритмы анализа и визуализации структур данных.