Бинарное дерево и поиск элементов в нем - 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
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д