Я пытаюсь создать рекурсивную функцию, которая проходит через словарь чисел, а затем выводит пройденный путь каждого узла.
Структура данных выглядит примерно так:
var tree = new Dictionary<int, List<int>>()
{
{888, new List<int>() {44}},
{ 44, new List<int>() {183, 275, 100, 216}},
{100, new List<int>() {299, 400}},
{299, new List<int>() {504}},
{216, new List<int>() {33}}
};
таким образом, древовидная структура, представляющая структуру данных, выглядит следующим образом
888
/ \
44 (many other nodes and subnodes)
/ / \ \
183 275 100 216
/ \ \
299 400 33
/
504
, и я хочу вернуть список списка, который выводит что-то вроде этого
[888, 44, 183]
[888, 44, 275]
[888, 44, 100, 299, 504]
[888, 44, 100, 400]
[888, 44, 216, 33]
Это то, что такдалеко, что может быть не правильно.Я могу успешно получить некоторые результаты, которые я хочу.Я думаю, что проблема заключается в том, что не удаляются узлы, у которых есть дочерние узлы, где были посещены все дочерние узлы.
public List<int[]> FindPaths(int currentNode, Dictionary<int, List<int>> tree, List<int> temp, List<int> visitedNodes)
{
if (tree.ContainsKey(currentNode))
{
if (!visitedNodes.Contains(currentNode))
{
visitedNodes.Add(currentNode);
}
foreach (var node in tree[currentNode])
{
visitedNodes.Add(node);
temp.Add(node);
// call method again with new values
FindPaths(node, tree, temp, visitedNodes);
}
// if node has no children left and is not a leaf node
// do something here?
}
else // we have reached a leaf node
{
paths.Add(temp.ToArray());
temp.RemoveAt(temp.Count - 1);
return paths;
}
return paths;
}
, вызывающая функцию
paths = new List<int[]>();
var temp = new List<int>();
var vistedNodes = new List<int>();
var result = FindPaths(888, tree, temp, vistedNodes);
Может кто-нибудь помочь мне получить выходные данныеЯ хочу?Я хотел бы, чтобы это работало рекурсивно, если это возможно