public class BinaryTreeNode<T>
public T Value { get; set; }
public BinaryTreeNode<T> Left { get; set; }
public BinaryTreeNode<T> Right { get; set; }
public BinaryTreeNode(T value)
public class BinaryTree<T> where T : IComparable<T>
public BinaryTreeNode<T> Root { get; set; }
public void Insert(T value)
Root = InsertRec(Root, value);
private BinaryTreeNode<T> InsertRec(BinaryTreeNode<T> node, T value)
return new BinaryTreeNode<T>(value);
if (value.CompareTo(node.Value) < 0)
node.Left = InsertRec(node.Left, value);
else if (value.CompareTo(node.Value) > 0)
node.Right = InsertRec(node.Right, value);
public void InOrderTraversal(Action<T> action)
InOrderRec(Root, action);
private void InOrderRec(BinaryTreeNode<T> node, Action<T> action)
InOrderRec(node.Left, action);
InOrderRec(node.Right, action);
public static void Main()
var tree = new BinaryTree<int>();
Console.WriteLine("Enter integer values to add to the BST (type 'done' to finish):");
Console.Write("Enter a value: ");
string input = Console.ReadLine();
if (input.ToLower() == "done")
if (int.TryParse(input, out int value))
Console.WriteLine($"Added {value} to the tree.");
Console.WriteLine("Invalid input. Please enter an integer or 'done'.");
Console.WriteLine("\nIn-Order Traversal of the Binary Search Tree:");
tree.InOrderTraversal(value => Console.Write(value + " "));