Бинарное дерево и поиск элементов в нем - C#
Формулировка задачи:
Пытаюсь написать класс для поиска элементов в бинарном дереве. Написал, но у меня не работает нижняя часть кода. Помогите решить это или подскажите плиз
вот исходник
данные дерева
namespace BinaryTree
{
public class BinaryTree<TNode> where TNode : IComparable<TNode>
{
public TNode Value { get; set; }
public BinaryTree<TNode> LeftSubtree { get; set; }
public BinaryTree<TNode> RightSubtree { get; set; }
private readonly Comparison<TNode> CompareFunction;
private BinaryTree<TNode> root { get; set; }
public BinaryTree(TNode nodeValue) {
Value = nodeValue;
LeftSubtree = null;
RightSubtree = null;
}
public void Add(TNode newValue)
{
if (Value.CompareTo(newValue) > 0)
{
// left
if (LeftSubtree == null)
LeftSubtree = new BinaryTree<TNode>(newValue);
else
LeftSubtree.Add(newValue);
}
else
{
// right
if (RightSubtree == null)
RightSubtree = new BinaryTree<TNode>(newValue);
else
RightSubtree.Add(newValue);
}
}
public void Browse()
{
if (LeftSubtree != null) LeftSubtree.Browse();
// LeftSubtree?.Browse();
Console.WriteLine(Value);
RightSubtree?.Browse();
}
public bool IsEmpty()
{
if (this.Value != null)
return true;
else
return false;
}
public bool Contains(TNode Value)
{
// search the tree for a node that contains data
BinaryTree<TNode> current = root;
int result;
while (current != null)
{
result = CompareFunction(current.Value, Value);
if (result == 0)
// we found data
return true;
else if (result > 0)
// current.Value > data, search current's left subtree
current = current.LeftSubtree;
else if (result < 0)
// current.Value < data, search current's right subtree
current = current.RightSubtree;
}
return false; // didn't find data
}
}
}namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
BinaryTree<int> tree = new BinaryTree<int>(1);
tree.Add(5);
tree.Add(-1);
tree.Add(7);
tree.Add(-5);
tree.Add(1);
tree.Browse();
BinaryTree<string> treeString = new BinaryTree<string>("ahoy");
treeString.Add("car");
treeString.Add("plane");
treeString.Add("dog");
treeString.Add("pidgeon");
treeString.Add("pig");
treeString.Add("monkey");
treeString.Browse();
// Test if we can find values in the tree
for (int Lp = 1; Lp <= 10; Lp++)
Console.WriteLine("Find ({0}) = {1}", Lp, tree.Contains(Lp));
// Test if we can find a non-existing value
Console.WriteLine("Find (999) = {0}", tree.Contains(999));
Console.WriteLine("Value is contained inside the tree is " + tree.IsEmpty());
Console.ReadKey();
}
}
}Решение задачи: «Бинарное дерево и поиск элементов в нем»
textual
Листинг программы
public class BinaryTree<TNode> where TNode : IComparable<TNode>
{
public TNode Value { get; set; }
public BinaryTree<TNode> LeftSubtree { get; set; }
public BinaryTree<TNode> RightSubtree { get; set; }
public BinaryTree(TNode nodeValue)
{
Value = nodeValue;
LeftSubtree = null;
RightSubtree = null;
}
public void Add(TNode newValue)
{
var comp = Value.CompareTo(newValue);
if (comp > 0)
{
// left
if (LeftSubtree == null)
LeftSubtree = new BinaryTree<TNode>(newValue);
else
LeftSubtree.Add(newValue);
}
if (comp < 0)
{
// right
if (RightSubtree == null)
RightSubtree = new BinaryTree<TNode>(newValue);
else
RightSubtree.Add(newValue);
}
}
public void Browse()
{
if (LeftSubtree != null) LeftSubtree.Browse();
if (RightSubtree != null) RightSubtree.Browse();
Console.WriteLine(Value);
}
public bool Contains(TNode Value)
{
// search the tree for a node that contains data
BinaryTree<TNode> current = this;
while (current != null)
{
int result = current.Value.CompareTo(Value);
if (result == 0)
// we found data
return true;
else if (result > 0)
// current.Value > data, search current's left subtree
current = current.LeftSubtree;
else if (result < 0)
// current.Value < data, search current's right subtree
current = current.RightSubtree;
}
return false; // didn't find data
}
}