using System.Collections;
using System.Collections.Generic;
public static void Main(string[] args)
var tree = new BinaryTree<int>(9);
Console.WriteLine("Обход в глубину");
var result = new StringBuilder();
foreach (var i in CLR_in_depth(tree))
result.Append(i.ToString() + " ");
Console.WriteLine(result + "\n");
Console.WriteLine("Обход в ширину");
foreach (var i in CLR_in_width(tree))
result.Append(i.ToString() + " ");
Console.WriteLine(result + "\n");
private static IEnumerable CLR_in_depth<T>(BinaryTree<T> tree) where T : IComparable
var stack = new Stack<BinaryTree<T>>();
private static IEnumerable CLR_in_width<T>(BinaryTree<T> tree) where T : IComparable
var stack = new Queue<BinaryTree<T>>();
var node = stack.Dequeue();
stack.Enqueue(node.Left);
stack.Enqueue(node.Right);
public class BinaryTree<T> where T : IComparable
public BinaryTree<T> Left { get; private set; }
public BinaryTree<T> Right { get; private set; }
BinaryTree<T> node = this;
BinaryTree<T> buffer = null;
if (key.CompareTo(node.Value) < 0)
if (key.CompareTo(buffer.Value) < 0)
buffer.Left = new BinaryTree<T>(key);
buffer.Right = new BinaryTree<T>(key);
public BinaryTree(T value)