Обход бинарного дерева стеком - C#
Формулировка задачи:
Задание такое: реализовать обход бинарного дерева в глубину (сверху вниз) с помощью стека. НЕ очереди, а именно стека. В общем-то как это осуществить?
Решение задачи: «Обход бинарного дерева стеком»
textual
Листинг программы
using System; using System.Collections.Generic; namespace ConsoleApplication188 { class Program { static void Main(string[] args) { var n3 = new Node {Name = "n3"}; var n1 = new Node {Left = n3, Name = "n1"}; var n2 = new Node { Name = "n2" }; var root = new Node {Left = n2, Right = n1, Name = "root"}; foreach (var n in EnumerateTree(root)) Console.WriteLine(n.Name); Console.ReadLine(); } private static IEnumerable<Node> EnumerateTree(Node root) { var stack = new Stack<Node>(); stack.Push(root); while(stack.Count > 0) { var n = stack.Pop(); yield return n; if (n.Left != null) stack.Push(n.Left); if (n.Right != null) stack.Push(n.Right); } } } class Node { public string Name; public Node Left; public Node Right; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д