Дано упорядоченное дерево глубины N (N > 0 — четное) - C#
Формулировка задачи:
Здравствуйте, нужна помощь с задачкой по программированию.
Дано упорядоченное дерево глубины N (N > 0 — четное), каждая внутренняя вершина которого имеет два непосредственных потомка: A с весом 1 и B с весом –1. Корень дерева C имеет вес 0. Записать в текстовый файл все пути от корня к листьям, удовлетворяющие следующему условию: суммарный вес элементов для любого начального отрезка пути неотрицателен1|неположителен2. Каждый путь записывается в отдельной строке файла. Перебирать пути, начиная с "самого левого" и заканчивая "самым правым", при этом первыми заменять конечные элементы пути.
Решение задачи: «Дано упорядоченное дерево глубины N (N > 0 — четное)»
textual
Листинг программы
private static void Main()
{
var paths = new List<Path>();
SetPaths(paths, 4, new Path(), 0);
foreach (Path path in paths)
{
Console.WriteLine($"Path {path} with weight {path.Weight}");
}
}
private static void SetPaths(ICollection<Path> paths, int n, Path path, int level)
{
level++;
if (level == n)
{
if (path.Length > 0)
{
paths.Add(path);
}
}
else if (level < n)
{
SetPaths(paths, n, Path.Add(path, NodeType.Left, 1), level);
SetPaths(paths, n, Path.Add(path, NodeType.Right, -1), level);
}
}
public class Path
{
public List<NodeType> Nodes { get; set; } = new List<NodeType>();
public int Weight { get; set; }
public int Length => Nodes.Count;
public static Path Add(Path path, NodeType type, int weight)
{
return new Path
{
Nodes = new List<NodeType>(path.Nodes) { type },
Weight = path.Weight + weight
};
}
public override string ToString()
{
return string.Join(", ", Nodes);
}
}
public enum NodeType
{
Left,
Right
}