private static string DisplayLongestPath(Node<int> currentNode, string str)
        {
            var stringBuilder = new StringBuilder(str);
            var pointer = "-->";

            stringBuilder.Append(currentNode.Value.ToString());
            stringBuilder.Append(pointer);

            /*for (int i = 0; i < currentNode.Children.Count; i++)
            {
                Node<int> child = currentNode.Children[i];

                stringBuilder.Append(child.Value.ToString());
                stringBuilder.Append(pointer);
                TraverseDFS(child);
            }*/

            foreach(var child in currentNode.Children)
            {
                var currentSb = new StringBuilder(stringBuilder.ToString());
                currentSb.Append(child.Value.ToString());
                //currentSb.Append(pointer);
                //stringBuilder.Append(currentSb);
                DisplayLongestPath(child, currentSb.ToString());
            }

            var path = stringBuilder.ToString();

            return path;
        }
 /// <summary>
 /// Метод Remove() удаляет элемент на который указывает node
 /// после удаления node будет указывать на элемент стоящий перед удалённым 
 /// </summary>
 public void Remove()
 {
     node = node.prev;
     node.next.next.prev = node;
     node.next = node.next.next;
     Count--;
 }
 /// <summary>
 /// Метод Start() начинает удалять каждый второй элемент в списке, пока в списке не останется 1 элемент
 /// </summary>
 public void Start()
 {
     while (Count > 1)
     {
         node = node.next.next;
         Remove();
     }
 }
 /// <summary>
 /// Конструктор с параметром инициализирует список длины n
 /// </summary>
 /// <param name="n"></param>
 public CycleIntIncList(int n)
 {
     if (n <= 1)
         throw new ArgumentOutOfRangeException("Длина списка дожна быть больше единицы.");
     else
     {
         Count = n;
         node = new Node(1);
         Node p = node;
         for (int i = 1; i < n; i++)
         {
             p.next = new Node(i + 1);
             p.next.prev = p;
             p = p.next;
         }
         p.next = node;
         node.prev = p;
         node = node.prev;
     }
 }
Ejemplo n.º 5
0
 public Node(int d)
 {
     data = d;
     next = null;
     prev = null;
 }
        private static int TraverseDFS(Node<int> currentNode)
        {
            if (currentNode == null)
            {
                throw new ArgumentNullException("node", "Root is null");
            }

            if (currentNode.Children.Count == 0)
            {
                return 0;
            }

            var maxPath = 0;

            foreach (var child in currentNode.Children)
            {
                TraverseDFS(child);
                maxPath++;

                // or
                //maxPath = Math.Max(maxPath, TraverseDFS(child));
            }

            //return maxPath + 1;

            return maxPath;
        }