如何更改此代码以摆脱递归?这个问题是这个问题的延续
public static IEnumerable<VisualElement> GetChildren(VisualElement root)
{
yield return root;
if (root?.Children != null)
foreach (var child in root.Children)
{
foreach (var node in GetChildren(child))
yield return node;
}
}
VisualElement
:
class VisualElement
{
public string Name { get; set; }
public IEnumerable<VisualElement> Children { get; set; }
}
对于初学者,您可以不使用
yield
,但保留递归,这样的解决方案将比为 生成迭代器更耗费资源yield
,尽管解决方案的本质保持不变。这就是没有递归的方法。解决方案的本质是绕过树的节点,但这需要3个链接——从父节点到第一个子节点,从最后一个子节点到父节点,从元素到下一个元素。
我将运行一个简单的测试
我在控制台中得到这个输出
看来这就是你想要得到的。