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