Completed 'Find' function
This commit is contained in:
parent
3f97e4b770
commit
3b39165316
@ -8,14 +8,14 @@ namespace C_.Datastructures.BinarySearchTree
|
|||||||
public TreeNode<T>? Root { get; set; }
|
public TreeNode<T>? Root { get; set; }
|
||||||
public int Count { get; set; }
|
public int Count { get; set; }
|
||||||
|
|
||||||
public Tree<T> Create(){
|
public static Tree<T> Create(){
|
||||||
//Create a new Tree with no Head
|
//Create a new Tree with no Head
|
||||||
return new Tree<T>{
|
return new Tree<T>{
|
||||||
Root = null,
|
Root = null,
|
||||||
Count = 0
|
Count = 0
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
public Tree<T> Create(T? value){
|
public static Tree<T> Create(T? value){
|
||||||
//Create a new Tree with Head
|
//Create a new Tree with Head
|
||||||
return new Tree<T>{
|
return new Tree<T>{
|
||||||
Root = TreeNode<T>.Create(value)
|
Root = TreeNode<T>.Create(value)
|
||||||
@ -46,14 +46,38 @@ namespace C_.Datastructures.BinarySearchTree
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Find(T? value){
|
public bool Find(T value)
|
||||||
if (Root == default)
|
{//Return true if the item can be found within the tree
|
||||||
{
|
if (Root == default || Root.Value!.Equals(default))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TreeNode<T>? current = Root;
|
||||||
|
|
||||||
|
while (current != default)
|
||||||
|
{
|
||||||
|
//Compare value at node to see if we are looking for the root item
|
||||||
|
if (current.Value!.Equals(value))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
current = Traverse(value, current);
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private TreeNode<T>? Traverse(T value, TreeNode<T> node)
|
||||||
|
{//T is comparable so use methods to determine which way to traverse
|
||||||
|
if(node == default)
|
||||||
|
return default;
|
||||||
|
|
||||||
|
if (value.CompareTo(node.Value) < 0)
|
||||||
|
{//Traverse Left
|
||||||
|
return node.Left;
|
||||||
|
}
|
||||||
|
//Traverse Right
|
||||||
|
return node.Right;
|
||||||
|
}
|
||||||
|
|
||||||
private TreeNode<T>? Descend(T value, TreeNode<T>? current)
|
private TreeNode<T>? Descend(T value, TreeNode<T>? current)
|
||||||
{//Keep trying to determine whether to go left or right until null node is found that can be appended to
|
{//Keep trying to determine whether to go left or right until null node is found that can be appended to
|
||||||
if (current == default)
|
if (current == default)
|
||||||
|
Loading…
Reference in New Issue
Block a user