fork download
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Test
  5. {
  6. public static void Main()
  7. {
  8. var root = new TreeNode<int, string>(8, "Value-8");
  9. root.Left = new TreeNode<int, string>(4, "Value-4");
  10. root.Left.Left = new TreeNode<int, string>(2, "Value-2");
  11. root.Left.Left.Left = new TreeNode<int, string>(1, "Value-1");
  12. root.Left.Left.Right = new TreeNode<int, string>(3, "Value-3");
  13. root.Left.Right = new TreeNode<int, string>(6, "Value-6");
  14. root.Left.Right.Left = new TreeNode<int, string>(5, "Value-5");
  15. root.Left.Right.Right = new TreeNode<int, string>(7, "Value-7");
  16. root.Right = new TreeNode<int, string>(12, "Value-12");
  17. root.Right.Left = new TreeNode<int, string>(10, "Value-10");
  18. root.Right.Left.Left = new TreeNode<int, string>(9, "Value-9");
  19. root.Right.Left.Right = new TreeNode<int, string>(11, "Value-11");
  20. root.Right.Right = new TreeNode<int, string>(14, "Value-14");
  21. root.Right.Right.Left = new TreeNode<int, string>(13, "Value-13");
  22. root.Right.Right.Right = new TreeNode<int, string>(15, "Value-15");
  23.  
  24. foreach (var item in root.TraverseLevelOrder())
  25. Console.WriteLine(item.Value);
  26. }
  27.  
  28.  
  29. }
  30.  
  31. public class TreeNode<TKey, TValue>
  32. {
  33. public TreeNode(TKey key, TValue value)
  34. {
  35. this.Key = key;
  36. this.Value = value;
  37. }
  38.  
  39. public TKey Key { get; private set; }
  40.  
  41. public TValue Value { get; set; }
  42.  
  43. public TreeNode<TKey, TValue> Left { get; set; }
  44.  
  45. public TreeNode<TKey, TValue> Right { get; set; }
  46.  
  47. public IEnumerable<TreeNode<TKey, TValue>> TraverseInOrder()
  48. {
  49. if (this.Left != null)
  50. foreach (var item in this.Left.TraverseInOrder())
  51. yield return item;
  52.  
  53. yield return this;
  54.  
  55. if (this.Right != null)
  56. foreach (var item in this.Right.TraverseInOrder())
  57. yield return item;
  58. }
  59.  
  60. public IEnumerable<TreeNode<TKey, TValue>> TraverseLevelOrder()
  61. {
  62. var queue = new Queue<TreeNode<TKey, TValue>>();
  63. queue.Enqueue(this);
  64.  
  65. while (queue.Count > 0)
  66. {
  67. var node = queue.Dequeue();
  68. yield return node;
  69.  
  70. if (node.Left != null)
  71. queue.Enqueue(node.Left);
  72.  
  73. if (node.Right != null)
  74. queue.Enqueue(node.Right);
  75. }
  76. }
  77. }
Success #stdin #stdout 0.04s 24000KB
stdin
Standard input is empty
stdout
Value-8
Value-4
Value-12
Value-2
Value-6
Value-10
Value-14
Value-1
Value-3
Value-5
Value-7
Value-9
Value-11
Value-13
Value-15