using System.Collections.Generic;
public static void Main()
var bst = new BinarySearchTree<int>();
var numbers = new int[] { 4, 2, 6, 1, 3, 5, 7 };
foreach (var number in numbers)
var range = bst.Keys(3, 6);
foreach (var num in range)
class BinarySearchTree<T> where T : IComparable
public T Key { get; set; }
public Node Left { get; set; }
public Node Right { get; set; }
public IEnumerable<T> Keys(T low, T high)
var queue = new Queue<T>();
Keys(Root, queue, low, high);
private void Keys(Node node, Queue<T> queue, T low, T high)
int cmpLow = low.CompareTo(node.Key);
int cmpHigh = high.CompareTo(node.Key);
Keys(node.Left, queue, low, high);
if (cmpLow <= 0 && cmpHigh >= 0)
Keys(node.Right, queue, low, high);
private Node Put(Node node, T key)
int cmp = key.CompareTo(node.Key);
node.Left = Put(node.Left, key);
node.Right = Put(node.Right, key);