在树中使用 yield 返回元素顺序的递归 [英] Recursion with yield return elements order in tree

查看:20
本文介绍了在树中使用 yield 返回元素顺序的递归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个递归函数,它返回所有子树节点,给定起始根节点.

I have a recursive function that returns all subtree nodes, given the starting root node.

private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
    foreach (Node node in subnode.Nodes)
        getAllNodesRecursively(node);

    yield return subnode;
}

对于以下树结构:

A
|
+--B
|
+--C
|  |
|  +--D
|
+--E

当我尝试这样迭代时:

foreach (Node n in getAllNodesRecursively(a))
{
    Console.WriteLine(n);
}

该函数仅返回 A 值.

the function returns the only the A value.

我希望将 yield-return 与递归一起使用,并检索 Preorder 中的元素(在此示例中为 A、B、C、D、E).

I wish to use yield-return with recursion and retrieve elements in the Preorder (A, B, C, D, E in this example).

(如果我把 yield return 放在 foreach 之前,foreach 永远不会发生).

(If I put the yield return before the foreach, the foreach would never happen).

这可能吗?

推荐答案

您是否尝试过类似的方法:

Have you tried something like:

private IEnumerable<Node> getAllNodesRecursively(Node subnode) 
{ 
    // Return the parent before its children
    yield return subnode; 

    foreach (Node node in subnode.Nodes) 
    {
        foreach(Node n in getAllNodesRecursively(node))
        {
            yield return n;
        }
    }
} 

您的实现以递归方式调用 getAllNodesRecursively,但忽略其返回值.

Your implementation is calling getAllNodesRecursively recursively, but ignoring its return value.

这篇关于在树中使用 yield 返回元素顺序的递归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆