Advertisement
avaqe

Untitled

Oct 10th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Runtime.InteropServices.ComTypes;
  6.  
  7. namespace Exercise
  8. {
  9. public class Tree<T> : IEnumerable<T>
  10. {
  11. private EnumeratorOrder _order;
  12.  
  13. public Tree(T root, EnumeratorOrder enumeratorOrder)
  14. {
  15. Value = root;
  16. Children = new LinkedList<Tree<T>>();
  17. Order = enumeratorOrder;
  18. }
  19.  
  20. public EnumeratorOrder Order
  21. {
  22. get { return _order; }
  23. set
  24. {
  25. if (!(((EnumeratorOrder[])Enum.GetValues(typeof(EnumeratorOrder))).Any(e=>e == value)))
  26. {
  27. throw new ArgumentOutOfRangeException();
  28. }
  29. _order = value;
  30. foreach (var child in Children)
  31. {
  32. child.Order = _order;
  33. }
  34. }
  35. }
  36.  
  37. public T Value { get; set; }
  38. public LinkedList<Tree<T>> Children { get; }
  39.  
  40. private void AsDepthFirst(LinkedList<T> num)
  41. {
  42. num.AddLast(Value);
  43. foreach (var child in Children)
  44. {
  45. child.AsDepthFirst(num);
  46. }
  47. }
  48.  
  49. private void AsBreadthFirst(LinkedList<T> num)
  50. {
  51. foreach (var child in Children)
  52. {
  53. num.AddLast(child.Value);
  54. }
  55. foreach (var child in Children)
  56. {
  57. child.AsBreadthFirst(num);
  58. }
  59. }
  60.  
  61. public void Add(T i)
  62. {
  63. Children.AddLast(new Tree<T>(i, Order));
  64. }
  65.  
  66. public void Add(Tree<T> subtree)
  67. {
  68. Children.AddLast(subtree);
  69. subtree.Order = Order;
  70. }
  71.  
  72. #region IEnumerable
  73.  
  74. IEnumerator IEnumerable.GetEnumerator()
  75. {
  76. return GetEnumerator();
  77. }
  78.  
  79. public IEnumerator<T> GetEnumerator()
  80. {
  81. var num = new LinkedList<T>();
  82. switch (Order)
  83. {
  84. case EnumeratorOrder.DepthFirstSearch:
  85. AsDepthFirst(num);
  86. break;
  87. case EnumeratorOrder.BreadthFirstSearch:
  88. num.AddLast(Value);
  89. AsBreadthFirst(num);
  90. break;
  91. default:
  92. return GetEnumerator();
  93. }
  94. return num.GetEnumerator();
  95. }
  96.  
  97. #endregion
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement