Обход бинарного дерева стеком - C#

Узнай цену своей работы

Формулировка задачи:

Задание такое: реализовать обход бинарного дерева в глубину (сверху вниз) с помощью стека. НЕ очереди, а именно стека. В общем-то как это осуществить?

Решение задачи: «Обход бинарного дерева стеком»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace ConsoleApplication188
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             var n3 = new Node {Name = "n3"};
  11.             var n1 = new Node {Left = n3, Name = "n1"};
  12.             var n2 = new Node { Name = "n2" };
  13.             var root = new Node {Left = n2, Right = n1, Name = "root"};
  14.             foreach (var n in EnumerateTree(root))
  15.                 Console.WriteLine(n.Name);
  16.  
  17.             Console.ReadLine();
  18.         }
  19.  
  20.         private static IEnumerable<Node> EnumerateTree(Node root)
  21.         {
  22.             var stack = new Stack<Node>();
  23.             stack.Push(root);
  24.  
  25.             while(stack.Count > 0)
  26.             {
  27.                 var n = stack.Pop();
  28.                 yield return n;
  29.                 if (n.Left != null) stack.Push(n.Left);
  30.                 if (n.Right != null) stack.Push(n.Right);
  31.             }
  32.         }
  33.     }
  34.  
  35.     class Node
  36.     {
  37.         public string Name;
  38.         public Node Left;
  39.         public Node Right;
  40.     }
  41. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы