Skip to content

Instantly share code, notes, and snippets.

@polatengin
Created February 24, 2018 09:13
Show Gist options
  • Save polatengin/10279a044c0b672d5e14ea375b16422c to your computer and use it in GitHub Desktop.
Save polatengin/10279a044c0b672d5e14ea375b16422c to your computer and use it in GitHub Desktop.
C# Binary Search Tree örneği
public void Add(params T[] values)
{
if (values == null || !values.Any())
{
throw new ArgumentOutOfRangeException("Please fill values parameter, or it'll throw an exception!");
}
var _values = new List<T>(values);
var middle = _values.OrderBy(e => e).Skip(_values.Count / 2).First();
_values.Remove(middle);
_values.Insert(0, middle);
foreach (var value in values)
{
if (this.Top == null)
{
Top = new Node<T>() { Value = value };
continue;
}
var current = this.Top;
var added = false;
do
{
if (Comparer<T>.Default.Compare(value, current.Value) == -1)
{
// go for left
if (current.Left == null)
{
current.Left = new Node<T>() { Value = value };
added = true;
}
else
{
current = current.Left;
}
}
else
{
// go for right
if (current.Right == null)
{
current.Right = new Node<T>() { Value = value };
added = true;
}
else
{
current = current.Right;
}
}
} while (!added);
}
}
// Add(5, 8, 3);
public void Add(params T[] value)
{
}
// Add(5);
public void Add(T value)
{
}
// Add(new int[] { 5, 8, 3 });
public void Add(T[] value)
{
}
dotnet new console
foreach (var value in values)
{
if (this.Top == null)
{
Top = new Node<T>() { Value = value };
continue;
}
var current = this.Top;
var added = false;
do
{
if (Comparer<T>.Default.Compare(value, current.Value) == -1)
{
// go for left
if (current.Left == null)
{
current.Left = new Node<T>() { Value = value };
added = true;
}
else
{
current = current.Left;
}
}
else
{
// go for right
if (current.Right == null)
{
current.Right = new Node<T>() { Value = value };
added = true;
}
else
{
current = current.Right;
}
}
} while (!added);
}
public class Node
{
public int Value { get; set; }
public Node Left { get; set; }
public Node Right { get; set; }
}
public class Node<T>
{
public T Value { get; set; }
public Node<T> Left { get; set; }
public Node<T> Right { get; set; }
}
var _values = new List<T>(values);
var middle = _values.OrderBy(e => e).Skip(_values.Count / 2).First();
_values.Remove(middle);
_values.Insert(0, middle);
public class Tree<T>
{
public Node<T> Top { get; set; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment