Wydrukuj widok z góry drzewa binarnego

void TopView(Node root)
{
    Queue q = new Queue();
    SortedDictionary<int, Node> topViewMap
      = new SortedDictionary<int, Node>();

    if (root == null) {
      return;
    }
    else {
      q.Enqueue(new QueueObj(root, 0));
    }

    // count function returns 1 if the container
    // contains an element whose key is equivalent
    // to hd, or returns zero otherwise.
    while (q.Count != 0) {
      QueueObj tmpNode = (QueueObj)q.Dequeue();

      if (!topViewMap.ContainsKey(tmpNode.hd)) {
        topViewMap[tmpNode.hd] = tmpNode.node;
      }

      if (tmpNode.node.left != null) {
        q.Enqueue(new QueueObj(tmpNode.node.left,
                               tmpNode.hd - 1));
      }
      if (tmpNode.node.right != null) {
        q.Enqueue(new QueueObj(tmpNode.node.right,
                               tmpNode.hd + 1));
      }
    }

    foreach(var entry in topViewMap.Values)
    {
      Console.Write(entry.data);
    }
}
PrashantUnity