Last active
March 5, 2019 12:15
-
-
Save gavr123456789/09986ed07dd310c69e9381947f6e96d3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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