using System.Collections;
using System.Collections.Generic;
public static BinarySearchTree<int> MyTree = new BinarySearchTree<int>();
public static void Main()
public class BinarySearchTree<T> where T : IComparable {
public Node<T> Root { get; private set; }
public int Length { get; private set; }
public void Add(T data) {
public void PrintNodes() {
private void PrintNodes(Node<T> current) {
if(current.Left != null) PrintNodes(current.Left);
Console.Write(current.Data);
if(current.Right !=null) PrintNodes(current.Right);
public void Add(T data,Node<T> current){
if(current.Data.CompareTo(data) > 0) {
if(current.Left == null) {
current.Left = new Node<T>() {
if(current.Right == null) {
current.Right = new Node<T>(){
public bool IsValidTree(Node<T> current){
Queue<Node<T>> queue = new Queue<Node<T>>();
var dequeued = queue.Dequeue();
if(dequeued.Left != null) {
if(dequeued.Left.Data.CompareTo(dequeued.Data) > 0) return false;
queue.Enqueue(dequeued.Left);
if(dequeued.Right != null) {
if(dequeued.Right.Data.CompareTo(dequeued.Data) < 0) return false;
queue.Enqueue(dequeued.Right);
public class Node<T> where T : IComparable {
public Node<T> Left { get; set; }
public Node<T> Right { get; set; }
public T Data { get; set; }