2013-05-27 45 views
0

我有一個愚蠢的樹實現和它的迭代按照正常順序。以樹狀反向迭代對象

喜歡的東西(代碼僅是說明性的):

public IEnumerable<ReferenceNode<TItem, TKey>> AllBellow(ReferenceNode<TItem, TKey> node) 
{ 
    if (/*some codition that tells me that i can return this*/) 
    { 
     yield return node; 
    } 
    else 
    { 
     foreach (var child in node.Children) 
     { 
      foreach (var grandChild in AllBellow(child)) 
      { 
       yield return grandChild; 
      } 
     } 
    } 
} 

對,所以我怎麼可能,從根開始,反向迭代?我的意思是,而不是去下來,去 ...

如果問題不是很清楚,請大家幫幫我它拉直了

回答

1

據我瞭解,你只需要扭轉孩子:

public IEnumerable<ReferenceNode<TItem, TKey>> AllBellow(ReferenceNode<TItem, TKey> node) 
{ 
    if (/*some codition that tells me that i can return this*/) 
    { 
     yield return node; 
    } 
    else 
    { 
     foreach (var child in node.Children.Reverse()) 
     { 
      foreach (var grandChild in AllBellow(child)) 
      { 
       yield return grandChild; 
      } 
     } 
    } 
} 
+0

謝謝,但我寧願不使用linq,因爲它可能對我的場景來說太慢 –

+0

@NoProblemBabe:'yield return'是LINQ的奠基石。 – YK1

+0

我意識到它,後期迭代,連接所有的迭代和所有。 –