Обзор кода: это самый эффективный / элегантный способ рекурсивного обхода дерева
Это более общий вопрос, поэтому ответ не обязательно должен быть в C#. Ниже приведена общая структура кода, которую я использую для рекурсивного обхода древовидной структуры. В этом конкретном случае я добавляю к объекту строителя строки в каждой итерации.
Есть ли способ улучшить этот код, чтобы быть быстрее или лучше?
public static void RecursiveFunction(StringBuilder sb, Object treeObject)
{
sb.Append(treeObject.GetCurrentValue("Name"));
if (treeObject.MoveToFirstChild())
{
RecursiveFunction(sb, treeObject);
}
if (treeObject.MoveToNextSibling())
{
RecursiveFunction(sb, treeObject);
}
if (treeObject.MoveToParent())
{
if (treeObject.MoveToNextSibling())
{
RecursiveFunction(sb, treeObject);
}
}
return;
}
Благодарю.
3 ответа
Решение
Я бы наверное сделал
public static void RecursiveFunction(StringBuilder sb, Object treeObject) {
sb.Append(treeObject.GetCurrentValue("Name"));
if (treeObject.MoveToFirstChild()) {
do {
RecursiveFunction(sb, treeObject);
} while (treeObject.MoveToNextSiblin());
treeObject.MoveToParent();
}
}
void RecurseTree(StringBuilder sb, Object tree)
{
foreach (var child in tree.Children)
{
sb.Append(child.Name);
if (child.Children.Count > 0)
{
RecurseTree(sb, child);
}
}
}
Я думаю, что эта часть должна быть избыточной:
if (treeObject.MoveToParent())
{
if (treeObject.MoveToNextSibling())
{
RecursiveFunction(sb, treeObject);
}
}
Рекурсия должна позаботиться об этом за вас.