Recursion with yield return elements order in tree
我有一个递归函数,返回给定起始根节点的所有子树节点。
1 2 3 4 5 6 7 | private IEnumerable<Node> getAllNodesRecursively(Node subnode) { foreach (Node node in subnode.Nodes) getAllNodesRecursively(node); yield return subnode; } |
对于以下树结构:
1 2 3 4 5 6 7 8 9 | A | +--B | +--C | | | +--D | +--E |
当我尝试这样迭代时:
1 2 3 4 | foreach (Node n in getAllNodesRecursively(a)) { Console.WriteLine(n); } |
函数只返回A值。
我希望将yield-return与递归结合使用,并在预订单中检索元素(本例中为a、b、c、d、e)。
(如果我把收益率放在前臂之前,前臂就永远不会发生了)。
这有可能吗?
您是否尝试过类似的操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } } } |
您的实现以递归方式调用
是的,有可能,把
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public IEnumerable<int> preOrder(Node root) { if (root == null) yield break; yield return root.val; if (root.left != null) foreach (int i in preOrder(root.left)) yield return i; if (root.right != null) foreach (int i in preOrder(root.right)) yield return i; } |