using C_.Datastructures.BinarySearchTree; using System; namespace C_.Datastructures.BinarySearchTree { internal class Tree where T:IComparable { public TreeNode? Root { get; set; } public int Count { get; set; } public Tree Create(){ //Create a new Tree with no Head return new Tree{ Root = null, Count = 0 }; } public Tree Create(T? value){ //Create a new Tree with Head return new Tree{ Root = TreeNode.Create(value) }; } public void Add(T value) {//Add item to the correct position in the tree (Input cannot be null) Count++; if (Root == default) {//If new node should become the root Root = TreeNode.Create(value); return; } //Find position to insert TreeNode node = Root; node = Descend(value, node)!; if (value.CompareTo(node.Value) < 0) {//Insert to left node.Left = TreeNode.Create(value); return; } //Insert to right node.Right = TreeNode.Create(value); return; } public bool Find(T value){ var x = Descend(value, Root); return true; } private TreeNode? Descend(T value, TreeNode? current) {//Keep trying to determine whether to go left or right until null node is found that can be appended to if (current == default) return default; TreeNode? node; if (value.CompareTo(current.Value) < 0) {//Descend left node = Descend(value, current.Left); if (node == null) { return current; } return node; } else {//Descend right node = Descend(value, current.Right); if (node == null) { return current; } return node; } } } }