Бинарное дерево и поиск элементов в нем - C#

Узнай цену своей работы

Формулировка задачи:

Пытаюсь написать класс для поиска элементов в бинарном дереве. Написал, но у меня не работает нижняя часть кода. Помогите решить это или подскажите плиз вот исходник
Листинг программы
  1. namespace BinaryTree
  2. {
  3. public class BinaryTree<TNode> where TNode : IComparable<TNode>
  4. {
  5.  
  6. public TNode Value { get; set; }
  7. public BinaryTree<TNode> LeftSubtree { get; set; }
  8. public BinaryTree<TNode> RightSubtree { get; set; }
  9. private readonly Comparison<TNode> CompareFunction;
  10. private BinaryTree<TNode> root { get; set; }
  11.  
  12. public BinaryTree(TNode nodeValue) {
  13. Value = nodeValue;
  14. LeftSubtree = null;
  15. RightSubtree = null;
  16. }
  17. public void Add(TNode newValue)
  18. {
  19. if (Value.CompareTo(newValue) > 0)
  20. {
  21. // left
  22. if (LeftSubtree == null)
  23. LeftSubtree = new BinaryTree<TNode>(newValue);
  24. else
  25. LeftSubtree.Add(newValue);
  26. }
  27. else
  28. {
  29. // right
  30. if (RightSubtree == null)
  31. RightSubtree = new BinaryTree<TNode>(newValue);
  32. else
  33. RightSubtree.Add(newValue);
  34. }
  35. }
  36. public void Browse()
  37. {
  38. if (LeftSubtree != null) LeftSubtree.Browse();
  39. // LeftSubtree?.Browse();
  40. Console.WriteLine(Value);
  41. RightSubtree?.Browse();
  42. }
  43. public bool IsEmpty()
  44. {
  45. if (this.Value != null)
  46. return true;
  47. else
  48. return false;
  49. }
  50. public bool Contains(TNode Value)
  51. {
  52. // search the tree for a node that contains data
  53. BinaryTree<TNode> current = root;
  54. int result;
  55. while (current != null)
  56. {
  57. result = CompareFunction(current.Value, Value);
  58. if (result == 0)
  59. // we found data
  60. return true;
  61. else if (result > 0)
  62. // current.Value > data, search current's left subtree
  63. current = current.LeftSubtree;
  64. else if (result < 0)
  65. // current.Value < data, search current's right subtree
  66. current = current.RightSubtree;
  67. }
  68. return false; // didn't find data
  69. }
  70. }
  71. }
данные дерева
Листинг программы
  1. namespace BinaryTree
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. BinaryTree<int> tree = new BinaryTree<int>(1);
  8. tree.Add(5);
  9. tree.Add(-1);
  10. tree.Add(7);
  11. tree.Add(-5);
  12. tree.Add(1);
  13. tree.Browse();
  14. BinaryTree<string> treeString = new BinaryTree<string>("ahoy");
  15. treeString.Add("car");
  16. treeString.Add("plane");
  17. treeString.Add("dog");
  18. treeString.Add("pidgeon");
  19. treeString.Add("pig");
  20. treeString.Add("monkey");
  21. treeString.Browse();
  22. // Test if we can find values in the tree
  23. for (int Lp = 1; Lp <= 10; Lp++)
  24. Console.WriteLine("Find ({0}) = {1}", Lp, tree.Contains(Lp));
  25. // Test if we can find a non-existing value
  26. Console.WriteLine("Find (999) = {0}", tree.Contains(999));
  27. Console.WriteLine("Value is contained inside the tree is " + tree.IsEmpty());
  28. Console.ReadKey();
  29. }
  30. }
  31. }

Решение задачи: «Бинарное дерево и поиск элементов в нем»

textual
Листинг программы
  1.     public class BinaryTree<TNode> where TNode : IComparable<TNode>
  2.     {
  3.         public TNode Value { get; set; }
  4.         public BinaryTree<TNode> LeftSubtree { get; set; }
  5.         public BinaryTree<TNode> RightSubtree { get; set; }
  6.  
  7.         public BinaryTree(TNode nodeValue)
  8.         {
  9.             Value = nodeValue;
  10.             LeftSubtree = null;
  11.             RightSubtree = null;
  12.         }
  13.  
  14.         public void Add(TNode newValue)
  15.         {
  16.             var comp = Value.CompareTo(newValue);
  17.             if (comp > 0)
  18.             {
  19.                 // left
  20.                 if (LeftSubtree == null)
  21.                     LeftSubtree = new BinaryTree<TNode>(newValue);
  22.                 else
  23.                     LeftSubtree.Add(newValue);
  24.             }
  25.             if (comp < 0)
  26.             {
  27.                 // right
  28.                 if (RightSubtree == null)
  29.                     RightSubtree = new BinaryTree<TNode>(newValue);
  30.                 else
  31.                     RightSubtree.Add(newValue);
  32.             }
  33.         }
  34.  
  35.         public void Browse()
  36.         {
  37.             if (LeftSubtree != null) LeftSubtree.Browse();
  38.             if (RightSubtree != null) RightSubtree.Browse();
  39.             Console.WriteLine(Value);
  40.         }
  41.  
  42.         public bool Contains(TNode Value)
  43.         {
  44.             // search the tree for a node that contains data
  45.             BinaryTree<TNode> current = this;
  46.  
  47.             while (current != null)
  48.             {
  49.                 int result = current.Value.CompareTo(Value);
  50.                 if (result == 0)
  51.                     // we found data
  52.                     return true;
  53.                 else if (result > 0)
  54.                     // current.Value > data, search current's left subtree
  55.                     current = current.LeftSubtree;
  56.                 else if (result < 0)
  57.                     // current.Value < data, search current's right subtree
  58.                     current = current.RightSubtree;
  59.             }
  60.  
  61.             return false;       // didn't find data
  62.         }
  63.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы