递归与产量的回报元素树订购 [英] Recursion with yield return elements order in tree

查看:129
本文介绍了递归与产量的回报元素树订购的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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);
}



函数返回只有一个值。

the function returns the only the A value.

我希望用收益回报的递归,并在预购检索元素(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).

(如果我把之前的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.

这篇关于递归与产量的回报元素树订购的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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