Skip to content

Instantly share code, notes, and snippets.

@gavr123456789
Last active March 5, 2019 12:15
Show Gist options
  • Save gavr123456789/09986ed07dd310c69e9381947f6e96d3 to your computer and use it in GitHub Desktop.
Save gavr123456789/09986ed07dd310c69e9381947f6e96d3 to your computer and use it in GitHub Desktop.
public enum BinSide{
Left,
Right
}
public class BinaryTree{
public long? Data { get; private set; }
public BinaryTree Left { get; set; }
public BinaryTree Right { get; set; }
public BinaryTree Parent { get; set; }
public void In(long data){
if (Data == null || Data == data){
Data = data;
return;
}
if (Data > data){
if (Left == null) Left = new BinaryTree();
Insert_withLongData(data, Left, this);
}
else{
if (Right == null) Right = new BinaryTree();
Insert_withLongData(data, Right, this);
}
}
/*
Вставляет значение в определённый узел дерева
data - Значение
node - Целевой узел для вставки
parent - Родительский узел*/
private void Insert_withLongData(long data, BinaryTree node, BinaryTree parent){
if (node.Data == null || node.Data == data){
node.Data = data;
node.Parent = parent;
return;
}
if (node.Data > data){
if (node.Left == null) node.Left = new BinaryTree();
Insert_withLongData(data, node.Left, node);
}
else{
if (node.Right == null) node.Right = new BinaryTree();
Insert_withLongData(data, node.Right, node);
}
}
/* Уставляет узел в узел дерева
data - Вставляемый узел
node - Целевой узел
parent - Родительский узел*/
private void Insert_withData(BinaryTree data, BinaryTree node, BinaryTree parent)
{
if (node.Data == null || node.Data == data.Data){
node.Data = data.Data;
node.Left = data.Left;
node.Right = data.Right;
node.Parent = parent;
return;
}
if (node.Data > data.Data){
if (node.Left == null) node.Left = new BinaryTree();
Insert_withData(data, node.Left, node);
}
else{
if (node.Right == null) node.Right = new BinaryTree();
Insert_withData(data, node.Right, node);
}
}
}
public class BinaryTreeExtensions
{
public static void Print(BinaryTree node, bool Task){
if (node != null){
if (node.Parent == null)
print(@"ROOT: $(node.Data)\n");
else{
if (node.Parent.Left == node)
print(@"Left for $(node.Parent.Data) --> $(node.Data)\n");
if(Task==false)
if (node.Parent.Right == node)
print(@"Right for $(node.Parent.Data) --> $(node.Data)\n");
}
if (node.Left != null)
Print(node.Left,(Task==false) ? false : true );
if (node.Right != null)
Print(node.Right,(Task==false) ? false : true );
}
}
}
void main (string[] args){
var t = new BinaryTree();
t.In(8);t.In(3);t.In(10);t.In(1);t.In(6);t.In(14);t.In(4);t.In(7);t.In(13);
BinaryTreeExtensions.Print(t,true);
pritn("\n");
BinaryTreeExtensions.Print(t,false);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment