Бинарное дерево. Обход в ширину - C#

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

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

Господа, добрый день. Прошу, помогите написать обход в ширину, с обходом в глубину разобрался, а вот с этим проблемы. Прикрепляю файл с тем, что уже есть, буду так же благодарен, если поможете с реализацией класса поиска элемента и поиска предыдущего элемента, а так же, удаления элемента.
Прикрепить не вышло, поэтому вот так //это прописано в Main
Листинг программы
  1. namespace Tree
  2. {
  3. /// <summary>
  4. /// Interaction logic for Window1.xaml
  5. /// </summary>
  6. public partial class Window1 : Window
  7. {
  8. public Window1()
  9. {
  10. InitializeComponent();
  11. }
  12. void button1_Click(object sender, RoutedEventArgs e)
  13. {
  14. MessageBox.Show ("");
  15. }
  16. public class Tree<T> where T: IComparable
  17. {
  18. protected Node<T> Root;//Корень дерева с инкапсуляцией Root
  19. public void AddNode(T newData)
  20. { if (Root == null) //Добавление первого элемента
  21. {
  22. Root = new Node<T>(newData);
  23. return;
  24. }
  25. AddNodeRecursion(Root, newData);
  26. }
  27. private static void AddNodeRecursion(Node<T>currentNode, T newData)
  28. {
  29. if (currentNode.Data.CompareTo(newData) < 0)
  30. {
  31. if (currentNode.Right == null)
  32. currentNode.Right = new Node<T>(newData);
  33. else
  34. AddNodeRecursion(currentNode.Right, newData);
  35. }
  36. else
  37. {
  38. if ( currentNode.Left == null )
  39. currentNode.Left = new Node<T>(newData);
  40. else
  41. AddNodeRecursion(currentNode.Left, newData);
  42. }
  43. }
  44. }
  45. }
  46. }
----------------------------------------------------------------------------------------------------------- //Сам узел
Листинг программы
  1. namespace Tree
  2. {
  3. /// <summary>
  4. /// Description of Class1.
  5. /// </summary>
  6. public class Node <T> where T : IComparable
  7. {
  8. public T Data { get; set; }
  9. public Node<T> Left { get; set; }
  10. public Node<T> Right { get; set; }//ссылка на правую ветвь
  11. public Node(T data) //конструктор
  12. {
  13. Data = data;
  14. }
  15. }// Конец класса Node<T>
  16. }
--------------------------------------------------------------------------------------- И обходы в глубину (Прямой, обратный, симметричный)
Листинг программы
  1. namespace Tree
  2. {
  3. /// <summary>
  4. /// Description of TreeObh.
  5. /// </summary>
  6.  
  7. public class TreeObh: Tree<int>
  8. {
  9. //Прямой обход дерева
  10. public string TreeTraversalDirect()
  11. {
  12. string s = TreeTraversalDirectRecursion(Root);
  13. return s;
  14. }
  15. private static string TreeTraversalDirectRecursion(Node<T> currentNode)
  16. { string s ="";
  17. if (currentNode != null)
  18. {
  19. s = Convert.ToString(currentNode.Data) + " ";
  20. s+=TreeTraversalDirectRecursion(currentNode.Left);
  21. s+=TreeTraversalDirectRecursion(currentNode.Right);
  22. }
  23. return s;
  24. }
  25. //Симметричный обход дерева
  26. public string TreeTraversalDirect()
  27. {
  28. string s = TreeTraversalDirectRecursion(Root);
  29. return s;
  30. }
  31. private static string TreeTraversalDirectRecursion(Node<T> currentNode)
  32. { string s ="";
  33. if (currentNode != null)
  34. {
  35. s+=TreeTraversalDirectRecursion(currentNode.Left);
  36. s += Convert.ToString(currentNode.Data) + " ";
  37. s+=TreeTraversalDirectRecursion(currentNode.Right);
  38. }
  39. return s;
  40. }
  41. //Обратный
  42. public string TreeTraversalDirect()
  43. {
  44. string s = TreeTraversalDirectRecursion(Root);
  45. return s;
  46. }
  47. private static string TreeTraversalDirectRecursion(Node<T> currentNode)
  48. { string s ="";
  49. if (currentNode != null)
  50. {
  51. s+=TreeTraversalDirectRecursion(currentNode.Left);
  52. s+=TreeTraversalDirectRecursion(currentNode.Right);
  53. s += Convert.ToString(currentNode.Data) + " ";
  54. }
  55. return s;
  56. }
  57. }
  58. }

Решение задачи: «Бинарное дерево. Обход в ширину»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace ConsoleApplication1
  5. {
  6.     class Program
  7.     {
  8.         int n = 5;
  9.         int[,] matrix;
  10.         static Random rnd = new Random();
  11.  
  12.         static void Main(string[] args)
  13.         {
  14.             new Program().Foo();
  15.         }
  16.  
  17.         void Foo()
  18.         {
  19.             Fill();
  20.  
  21.             string tmp = string.Empty;
  22.             int?[,] rib = new int?[n, n];
  23.  
  24.             Queue<int> quene = new Queue<int>();
  25.             List<int> loocedVertex = new List<int>();
  26.  
  27.             quene.Enqueue(0);
  28.             while (quene.Count != 0)
  29.             {
  30.                 int index = quene.Dequeue();
  31.                 for (short i = 0; i < n; i++)
  32.                 {
  33.                     if (matrix[index, i] != 0)
  34.                     {
  35.                         if (!quene.Contains(i) && !loocedVertex.Contains(i))
  36.                         {
  37.                             quene.Enqueue(i);
  38.                             rib[index, i] = 1;
  39.                         }
  40.                     }
  41.  
  42.                     else rib[index, i] = 0;
  43.                 }
  44.  
  45.                 tmp += " -> " + (index + 1);
  46.                 loocedVertex.Add(index);
  47.             }
  48.             Console.WriteLine("Прохождение графа в ширину:");
  49.             Console.WriteLine(tmp);
  50.  
  51.             Console.ReadLine();
  52.         }
  53.  
  54.         private void Fill()
  55.         {
  56.             matrix = new int[n, n];
  57.  
  58.             for (short i = 0; i < n; i++)
  59.             {
  60.                 for (short j = 0; j < n; j++)
  61.                 {
  62.                     int tmp = rnd.Next(0, 2);
  63.                     matrix[i, j] = tmp;
  64.                     Console.Write(tmp + " ");
  65.                 }
  66.                 Console.WriteLine();
  67.             }
  68.             Console.WriteLine();
  69.         }
  70.     }
  71. }

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


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

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

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

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

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

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