Binary Tree Program

This commit is contained in:
Luke Else 2021-06-21 12:56:26 +01:00
parent 1168d0b934
commit 72ec29eafc
6 changed files with 194 additions and 0 deletions

View File

@ -0,0 +1,26 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/bin/Debug/net5.0/BinaryTree.dll",
"args": [],
"cwd": "${workspaceFolder}",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}

View File

@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/BinaryTree.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/BinaryTree.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/BinaryTree.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}

View File

@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,20 @@
using System;
namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
tree tree = new tree();
tree.Add(5);
tree.Add(7);
tree.Add(6);
tree.Add(8);
tree.Add(3);
tree.Add(1);
tree.Add(4);
}
}
}

View File

@ -0,0 +1,41 @@
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; }
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 GetLeft(){
return Left;
}
public void SetLeft(dynamic _Data, node _Parent){
Left = new node(_Data, _Parent);
}
public node GetRight(){
return Right;
}
public void SetRight(dynamic _Data, node _Parent){
Right = new node(_Data, _Parent);
}
}
}

View File

@ -0,0 +1,57 @@
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(_Data, Current);
}else{
Current.SetRight(_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();
}
}
}