diff --git a/BinaryTree/BinaryTree/.vscode/launch.json b/BinaryTree/.vscode/launch.json similarity index 100% rename from BinaryTree/BinaryTree/.vscode/launch.json rename to BinaryTree/.vscode/launch.json diff --git a/BinaryTree/BinaryTree/.vscode/tasks.json b/BinaryTree/.vscode/tasks.json similarity index 100% rename from BinaryTree/BinaryTree/.vscode/tasks.json rename to BinaryTree/.vscode/tasks.json diff --git a/BinaryTree/BinaryTree/BinaryTree.csproj b/BinaryTree/BinaryTree.csproj similarity index 95% rename from BinaryTree/BinaryTree/BinaryTree.csproj rename to BinaryTree/BinaryTree.csproj index 1d2d39a..2082704 100644 --- a/BinaryTree/BinaryTree/BinaryTree.csproj +++ b/BinaryTree/BinaryTree.csproj @@ -1,8 +1,8 @@ - - - - Exe - net5.0 - - - + + + + Exe + net5.0 + + + diff --git a/BinaryTree/BinaryTree/Program.cs b/BinaryTree/Program.cs similarity index 95% rename from BinaryTree/BinaryTree/Program.cs rename to BinaryTree/Program.cs index 30d4a69..3d48f5f 100644 --- a/BinaryTree/BinaryTree/Program.cs +++ b/BinaryTree/Program.cs @@ -1,31 +1,31 @@ -using System; - -namespace BinaryTree -{ - class Program - { - static void Main(string[] args) - { - tree tree = new tree(); - - Random random = new Random(); - - for (var i = 0; i < 35; i++) - { - tree.Add(random.Next(0, 100)); - } - - while (true) - { - Console.Clear(); - tree.Print(tree.Root); - Console.WriteLine("-------------------------------------"); - Console.WriteLine("Delete node: "); - - tree.Delete(Convert.ToInt32(Console.ReadLine())); - - } - - } - } -} +using System; + +namespace BinaryTree +{ + class Program + { + static void Main(string[] args) + { + tree tree = new tree(); + + Random random = new Random(); + + for (var i = 0; i < 35; i++) + { + tree.Add(random.Next(0, 100)); + } + + while (true) + { + Console.Clear(); + tree.Print(tree.Root); + Console.WriteLine("-------------------------------------"); + Console.WriteLine("Delete node: "); + + tree.Delete(Convert.ToInt32(Console.ReadLine())); + + } + + } + } +} diff --git a/BinaryTree/BinaryTree/node.cs b/BinaryTree/node.cs similarity index 96% rename from BinaryTree/BinaryTree/node.cs rename to BinaryTree/node.cs index a9d082f..0c82bc6 100644 --- a/BinaryTree/BinaryTree/node.cs +++ b/BinaryTree/node.cs @@ -1,52 +1,52 @@ -namespace BinaryTree -{ - public class node - { - public dynamic Data { get; set; } - private node Parent { get; set; } - private node Left { get; set; } - private node Right { get; set; } - - - //Print Method Data - public int StartPos; - public int Size { get { return Data.Length; } } - public int EndPos { get { return StartPos + Size; } set { StartPos = value - Size; } } - - - public node(dynamic _Data = null, - node _Parent = null, - node _Left = null, - node _Right = null){ - - //New node for a Binary Tree. Values can be set to null if they are not present - Data = _Data; - Parent = _Parent; - Left = _Left; - Right = _Right; - - } - - public node GetParent(){ - return Parent; - } - public void SetParent(node _Parent){ - Parent = _Parent; - } - - public node GetLeft(){ - return Left; - } - public void SetLeft(node _Left){ - Left = _Left; - } - - public node GetRight(){ - return Right; - } - public void SetRight(node _Right){ - Right = _Right; - } - - } +namespace BinaryTree +{ + public class node + { + public dynamic Data { get; set; } + private node Parent { get; set; } + private node Left { get; set; } + private node Right { get; set; } + + + //Print Method Data + public int StartPos; + public int Size { get { return Data.Length; } } + public int EndPos { get { return StartPos + Size; } set { StartPos = value - Size; } } + + + public node(dynamic _Data = null, + node _Parent = null, + node _Left = null, + node _Right = null){ + + //New node for a Binary Tree. Values can be set to null if they are not present + Data = _Data; + Parent = _Parent; + Left = _Left; + Right = _Right; + + } + + public node GetParent(){ + return Parent; + } + public void SetParent(node _Parent){ + Parent = _Parent; + } + + public node GetLeft(){ + return Left; + } + public void SetLeft(node _Left){ + Left = _Left; + } + + public node GetRight(){ + return Right; + } + public void SetRight(node _Right){ + Right = _Right; + } + + } } \ No newline at end of file diff --git a/BinaryTree/BinaryTree/tree.cs b/BinaryTree/tree.cs similarity index 97% rename from BinaryTree/BinaryTree/tree.cs rename to BinaryTree/tree.cs index 9059975..69d69ff 100644 --- a/BinaryTree/BinaryTree/tree.cs +++ b/BinaryTree/tree.cs @@ -1,280 +1,280 @@ -using System; -using System.Collections.Generic; - -namespace BinaryTree -{ - public class tree - { - public node Root { get; set; } - private node Current { get; set; } - - public tree(dynamic _Data = null){ - //New tree - Sets the Root of the tree to a new node - Root = new node(_Data); - } - - public void Add(dynamic _Data){ - //If the Root of the List is not set. - if (Root.Data == null) - { - Root.Data = _Data; - return; - }else{ - Current = Root; - } - - //traverse through the tree to the relevant point at which the item should be added - while(true){ - var temp = Traverse(_Data, Current); - - //If it is null, we are at a leaf node and we can stop traversing the tree - if (temp == null) - { - break; - } - Current = temp; - } - - //Check whether we need to add the node to the left or right of - if (_Data < Current.Data) - { - Current.SetLeft(new node(_Data, Current)); - }else{ - Current.SetRight(new node(_Data, Current)); - } - - } - - private node Traverse(dynamic _Data, node _Current){ - //Check whether to branch to the right or the left in the tree. - if (_Data < _Current.Data) - { - return _Current.GetLeft(); - } - return _Current.GetRight(); - } - - public bool Delete(dynamic _Data){ - //Traverse to the node we are trying to delete - Current = Root; - //try statement will run unless the node does not exitst, in which case it will throw an exception and return false. - try - { - while(true){ - - if (_Data != Current.Data) - { - Current = Traverse(_Data, Current); - }else{ - break; - } - - } - } - catch - { - //If it can't be found, return false - return false; - } - - if (Current.GetLeft() != null && Current.GetRight() != null) - { - //If it has 2 children - node temp = Current.GetLeft(); - - //Traverse to node that will replace Current - while(true){ - if (temp.GetRight() != null) - { - temp = temp.GetRight(); - }else{ - break; - } - } - - Current.Data = temp.Data; - - //Find if the temp node is a left or a right node before deleting. - if(temp.GetParent() == Current){ - //If the current node is parent to our replacing node. (Only 1 level down) - Current.SetLeft(temp.GetLeft()); - if (temp.GetLeft() != null) - { - temp.GetLeft().SetParent(temp.GetParent()); - } - }else{ - //If we could traverse down the left hand side - if (temp.GetLeft() != null) - { - temp.GetParent().SetRight(temp.GetLeft()); - temp.GetLeft().SetParent(temp.GetParent()); - }else{ - temp.GetParent().SetRight(null); - } - } - return true; - - }else if(Current.GetLeft() != null || Current.GetRight() != null) - { - - bool LeftFlag = false; - - if (Current == Root) - { - if (Current.GetLeft() != null) - { - Root = Current.GetLeft(); - }else{ - Root = Current.GetRight(); - } - return true; - } - - if (Current.Data < Current.GetParent().Data) - { - LeftFlag = true; - } - - if (Current.GetLeft() != null) - {//If it has a left child - if (LeftFlag == true) - { - Current.GetParent().SetLeft(Current.GetLeft()); - }else{ - Current.GetParent().SetRight(Current.GetLeft()); - } - Current.GetLeft().SetParent(Current.GetParent()); - }else{//If it has a right child - if (LeftFlag == true) - { - Current.GetParent().SetLeft(Current.GetRight()); - }else{ - Current.GetParent().SetRight(Current.GetRight()); - } - Current.GetRight().SetParent(Current.GetParent()); - } - - return true; - - - }else{ - - //If it has no children - if (Current == Root) - { - Root = null; - return true; - }else{ - - //Set the parent's relevent pointer to null - if (Current.Data <= Current.GetParent().Data) - { - Current.GetParent().SetLeft(null); - return true; - }else{ - Current.GetParent().SetRight(null); - return true; - } - - } - - } - - } - - - - - - //print Method functions - public void Print(node root, int topMargin = 2, int leftMargin = 2) - { - if (root == null) return; - int rootTop = Console.CursorTop + topMargin; - var last = new List(); - var next = root; - for (int level = 0; next != null; level++) - { - var item = new node { Data = next.Data.ToString(" 0 ") }; - item.SetLeft(next.GetLeft()); - item.SetRight(next.GetRight()); - if (level < last.Count) - { - item.StartPos = last[level].EndPos + 1; - last[level] = item; - } - else - { - item.StartPos = leftMargin; - last.Add(item); - } - if (level > 0) - { - item.SetParent(last[level - 1]); - if (next == item.GetParent().GetLeft()) - { - item.GetParent().SetLeft(item); - item.EndPos = Math.Max(item.EndPos, item.GetParent().StartPos); - } - else - { - item.GetParent().SetRight(item); - item.StartPos = Math.Max(item.StartPos, item.GetParent().EndPos); - } - } - next = next.GetLeft() ?? next.GetRight(); - for (; next == null; item = item.GetParent()) - { - Print(item, rootTop + 2 * level); - if (--level < 0) break; - if (item == item.GetParent().GetLeft()) - { - item.GetParent().StartPos = item.EndPos; - next = item.GetParent().GetRight(); - } - else - { - if (item.GetParent().GetLeft() == null) - item.GetParent().EndPos = item.StartPos; - else - item.GetParent().StartPos += (item.StartPos - item.GetParent().EndPos) / 2; - } - } - } - Console.SetCursorPosition(0, rootTop + 2 * last.Count - 1); - } - - private void Print(node item, int top) - { - SwapColors(); - Print(item.Data, top, item.StartPos); - SwapColors(); - if (item.GetLeft() != null) - PrintLink(top + 1, "┌", "┘", item.GetLeft().StartPos + item.GetLeft().Size / 2, item.StartPos); - if (item.GetRight() != null) - PrintLink(top + 1, "└", "┐", item.EndPos - 1, item.GetRight().StartPos + item.GetRight().Size / 2); - } - - private void PrintLink(int top, string start, string end, int startPos, int endPos) - { - Print(start, top, startPos); - Print("─", top, startPos + 1, endPos); - Print(end, top, endPos); - } - - private void Print(string s, int top, int left, int right = -1) - { - Console.SetCursorPosition(left, top); - if (right < 0) right = left + s.Length; - while (Console.CursorLeft < right) Console.Write(s); - } - - private void SwapColors() - { - var color = Console.ForegroundColor; - Console.ForegroundColor = Console.BackgroundColor; - Console.BackgroundColor = color; - } - - } +using System; +using System.Collections.Generic; + +namespace BinaryTree +{ + public class tree + { + public node Root { get; set; } + private node Current { get; set; } + + public tree(dynamic _Data = null){ + //New tree - Sets the Root of the tree to a new node + Root = new node(_Data); + } + + public void Add(dynamic _Data){ + //If the Root of the List is not set. + if (Root.Data == null) + { + Root.Data = _Data; + return; + }else{ + Current = Root; + } + + //traverse through the tree to the relevant point at which the item should be added + while(true){ + var temp = Traverse(_Data, Current); + + //If it is null, we are at a leaf node and we can stop traversing the tree + if (temp == null) + { + break; + } + Current = temp; + } + + //Check whether we need to add the node to the left or right of + if (_Data < Current.Data) + { + Current.SetLeft(new node(_Data, Current)); + }else{ + Current.SetRight(new node(_Data, Current)); + } + + } + + private node Traverse(dynamic _Data, node _Current){ + //Check whether to branch to the right or the left in the tree. + if (_Data < _Current.Data) + { + return _Current.GetLeft(); + } + return _Current.GetRight(); + } + + public bool Delete(dynamic _Data){ + //Traverse to the node we are trying to delete + Current = Root; + //try statement will run unless the node does not exitst, in which case it will throw an exception and return false. + try + { + while(true){ + + if (_Data != Current.Data) + { + Current = Traverse(_Data, Current); + }else{ + break; + } + + } + } + catch + { + //If it can't be found, return false + return false; + } + + if (Current.GetLeft() != null && Current.GetRight() != null) + { + //If it has 2 children + node temp = Current.GetLeft(); + + //Traverse to node that will replace Current + while(true){ + if (temp.GetRight() != null) + { + temp = temp.GetRight(); + }else{ + break; + } + } + + Current.Data = temp.Data; + + //Find if the temp node is a left or a right node before deleting. + if(temp.GetParent() == Current){ + //If the current node is parent to our replacing node. (Only 1 level down) + Current.SetLeft(temp.GetLeft()); + if (temp.GetLeft() != null) + { + temp.GetLeft().SetParent(temp.GetParent()); + } + }else{ + //If we could traverse down the left hand side + if (temp.GetLeft() != null) + { + temp.GetParent().SetRight(temp.GetLeft()); + temp.GetLeft().SetParent(temp.GetParent()); + }else{ + temp.GetParent().SetRight(null); + } + } + return true; + + }else if(Current.GetLeft() != null || Current.GetRight() != null) + { + + bool LeftFlag = false; + + if (Current == Root) + { + if (Current.GetLeft() != null) + { + Root = Current.GetLeft(); + }else{ + Root = Current.GetRight(); + } + return true; + } + + if (Current.Data < Current.GetParent().Data) + { + LeftFlag = true; + } + + if (Current.GetLeft() != null) + {//If it has a left child + if (LeftFlag == true) + { + Current.GetParent().SetLeft(Current.GetLeft()); + }else{ + Current.GetParent().SetRight(Current.GetLeft()); + } + Current.GetLeft().SetParent(Current.GetParent()); + }else{//If it has a right child + if (LeftFlag == true) + { + Current.GetParent().SetLeft(Current.GetRight()); + }else{ + Current.GetParent().SetRight(Current.GetRight()); + } + Current.GetRight().SetParent(Current.GetParent()); + } + + return true; + + + }else{ + + //If it has no children + if (Current == Root) + { + Root = null; + return true; + }else{ + + //Set the parent's relevent pointer to null + if (Current.Data <= Current.GetParent().Data) + { + Current.GetParent().SetLeft(null); + return true; + }else{ + Current.GetParent().SetRight(null); + return true; + } + + } + + } + + } + + + + + + //print Method functions + public void Print(node root, int topMargin = 2, int leftMargin = 2) + { + if (root == null) return; + int rootTop = Console.CursorTop + topMargin; + var last = new List(); + var next = root; + for (int level = 0; next != null; level++) + { + var item = new node { Data = next.Data.ToString(" 0 ") }; + item.SetLeft(next.GetLeft()); + item.SetRight(next.GetRight()); + if (level < last.Count) + { + item.StartPos = last[level].EndPos + 1; + last[level] = item; + } + else + { + item.StartPos = leftMargin; + last.Add(item); + } + if (level > 0) + { + item.SetParent(last[level - 1]); + if (next == item.GetParent().GetLeft()) + { + item.GetParent().SetLeft(item); + item.EndPos = Math.Max(item.EndPos, item.GetParent().StartPos); + } + else + { + item.GetParent().SetRight(item); + item.StartPos = Math.Max(item.StartPos, item.GetParent().EndPos); + } + } + next = next.GetLeft() ?? next.GetRight(); + for (; next == null; item = item.GetParent()) + { + Print(item, rootTop + 2 * level); + if (--level < 0) break; + if (item == item.GetParent().GetLeft()) + { + item.GetParent().StartPos = item.EndPos; + next = item.GetParent().GetRight(); + } + else + { + if (item.GetParent().GetLeft() == null) + item.GetParent().EndPos = item.StartPos; + else + item.GetParent().StartPos += (item.StartPos - item.GetParent().EndPos) / 2; + } + } + } + Console.SetCursorPosition(0, rootTop + 2 * last.Count - 1); + } + + private void Print(node item, int top) + { + SwapColors(); + Print(item.Data, top, item.StartPos); + SwapColors(); + if (item.GetLeft() != null) + PrintLink(top + 1, "┌", "┘", item.GetLeft().StartPos + item.GetLeft().Size / 2, item.StartPos); + if (item.GetRight() != null) + PrintLink(top + 1, "└", "┐", item.EndPos - 1, item.GetRight().StartPos + item.GetRight().Size / 2); + } + + private void PrintLink(int top, string start, string end, int startPos, int endPos) + { + Print(start, top, startPos); + Print("─", top, startPos + 1, endPos); + Print(end, top, endPos); + } + + private void Print(string s, int top, int left, int right = -1) + { + Console.SetCursorPosition(left, top); + if (right < 0) right = left + s.Length; + while (Console.CursorLeft < right) Console.Write(s); + } + + private void SwapColors() + { + var color = Console.ForegroundColor; + Console.ForegroundColor = Console.BackgroundColor; + Console.BackgroundColor = color; + } + + } } \ No newline at end of file diff --git a/DoublyLinkedList/DoublyLinkedList/App.config b/DoublyLinkedList/App.config similarity index 100% rename from DoublyLinkedList/DoublyLinkedList/App.config rename to DoublyLinkedList/App.config diff --git a/DoublyLinkedList/DoublyLinkedList/DoublyLinkedList.csproj b/DoublyLinkedList/DoublyLinkedList.csproj similarity index 100% rename from DoublyLinkedList/DoublyLinkedList/DoublyLinkedList.csproj rename to DoublyLinkedList/DoublyLinkedList.csproj diff --git a/DoublyLinkedList/DoublyLinkedList.sln b/DoublyLinkedList/DoublyLinkedList.sln index 9781d0c..cbb4151 100644 --- a/DoublyLinkedList/DoublyLinkedList.sln +++ b/DoublyLinkedList/DoublyLinkedList.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.31229.75 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DoublyLinkedList", "DoublyLinkedList\DoublyLinkedList.csproj", "{D7477EF3-B68D-47A5-BFA0-8FDD9354C99C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DoublyLinkedList", "DoublyLinkedList.csproj", "{D7477EF3-B68D-47A5-BFA0-8FDD9354C99C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/DoublyLinkedList/DoublyLinkedList/LinkedList.cs b/DoublyLinkedList/LinkedList.cs similarity index 100% rename from DoublyLinkedList/DoublyLinkedList/LinkedList.cs rename to DoublyLinkedList/LinkedList.cs diff --git a/DoublyLinkedList/DoublyLinkedList/Node.cs b/DoublyLinkedList/Node.cs similarity index 100% rename from DoublyLinkedList/DoublyLinkedList/Node.cs rename to DoublyLinkedList/Node.cs diff --git a/DoublyLinkedList/DoublyLinkedList/Program.cs b/DoublyLinkedList/Program.cs similarity index 100% rename from DoublyLinkedList/DoublyLinkedList/Program.cs rename to DoublyLinkedList/Program.cs diff --git a/DoublyLinkedList/DoublyLinkedList/Properties/AssemblyInfo.cs b/DoublyLinkedList/Properties/AssemblyInfo.cs similarity index 100% rename from DoublyLinkedList/DoublyLinkedList/Properties/AssemblyInfo.cs rename to DoublyLinkedList/Properties/AssemblyInfo.cs diff --git a/Prime Numbers (Efficient)/Prime Numbers (Efficient)/App.config b/Prime Numbers (Efficient)/App.config similarity index 100% rename from Prime Numbers (Efficient)/Prime Numbers (Efficient)/App.config rename to Prime Numbers (Efficient)/App.config diff --git a/Prime Numbers (Efficient)/Prime Numbers (Efficient)/Prime Numbers (Efficient).csproj b/Prime Numbers (Efficient)/Prime Numbers (Efficient).csproj similarity index 100% rename from Prime Numbers (Efficient)/Prime Numbers (Efficient)/Prime Numbers (Efficient).csproj rename to Prime Numbers (Efficient)/Prime Numbers (Efficient).csproj diff --git a/Prime Numbers (Efficient)/Prime Numbers (Efficient).sln b/Prime Numbers (Efficient)/Prime Numbers (Efficient).sln index 253c1c3..529ed36 100644 --- a/Prime Numbers (Efficient)/Prime Numbers (Efficient).sln +++ b/Prime Numbers (Efficient)/Prime Numbers (Efficient).sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30320.27 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prime Numbers (Efficient)", "Prime Numbers (Efficient)\Prime Numbers (Efficient).csproj", "{F438C480-1EEE-4010-A79D-BDFC1712EFBC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prime Numbers (Efficient)", "Prime Numbers (Efficient).csproj", "{F438C480-1EEE-4010-A79D-BDFC1712EFBC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Prime Numbers (Efficient)/Prime Numbers (Efficient)/Program.cs b/Prime Numbers (Efficient)/Program.cs similarity index 100% rename from Prime Numbers (Efficient)/Prime Numbers (Efficient)/Program.cs rename to Prime Numbers (Efficient)/Program.cs diff --git a/Prime Numbers (Efficient)/Prime Numbers (Efficient)/Properties/AssemblyInfo.cs b/Prime Numbers (Efficient)/Properties/AssemblyInfo.cs similarity index 100% rename from Prime Numbers (Efficient)/Prime Numbers (Efficient)/Properties/AssemblyInfo.cs rename to Prime Numbers (Efficient)/Properties/AssemblyInfo.cs diff --git a/Prime Numbers (Efficient)/Prime Numbers (Efficient)/prime.cs b/Prime Numbers (Efficient)/prime.cs similarity index 100% rename from Prime Numbers (Efficient)/Prime Numbers (Efficient)/prime.cs rename to Prime Numbers (Efficient)/prime.cs