@be_a_man

Как найти самую длинную ветвь в дереве?

JavaScript.
Есть пошаговая форма. Нужно показывать на сколько осталось ответить, в зависимости от ответов.
5f441fd430357464446335.jpeg

Пример данных. Вложенность может быть любая.
const quest = [
  {
    title: 'q1',
    answers: [
      { title: 'a1-1' },
      {
        title: 'a1-2',
        next: [
          {
            title: 'q1-2-1',
            answers: [
              { title: 'a1-2-1-1' },
              { title: 'a1-2-1-2' }
            ]
          }
        ]
      },
      {
        title: 'a1-3',
        next: [
          {
            title: 'q1-3-1',
            answers: [
              { title: 'a1-3-1-1' },
              { title: 'a1-3-1-2' },
              {
                title: 'a1-3-1-3',
                next: [
                  {
                    title: 'q1-3-1-3-1',
                    answers: [
                      { title: 'a1-3-1-3-1-1' },
                      { title: 'a1-3-1-3-1-2' },
                      { title: 'a1-3-1-3-1-3' }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },

  {
    title: 'q2',
    answers: [
      { title: 'a2-1' },
      { title: 'a2-2' },
    ]
  },

  {
    title: 'q3',
    answers: [
      { title: 'a2-1' },
      {
        title: 'a2-2',
        next: [
          {
            title: 'q2-2-1',
            answers: [
              { title: 'a2-2-1-1' },
              { title: 'a2-2-1-2' }
            ]
          }
        ]
      },
      {
        title: 'a2-3',
        next: [
          {
            title: 'q2-3-1',
            answers: [
              { title: 'a2-3-1-1' },
              { title: 'a2-3-1-2' }
            ]
          }
        ]
      }
    ]
  },
]
  • Вопрос задан
  • 333 просмотра
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Никак, если есть ветвление на текущем шаге с разным количеством вопросов.

Можно показывать только процентную часть от максимально-возможного кол-ва ответов в данной ветке:
[прогресс, в %] = 100*([пройденное кол-во вопросов в текущей ветке]/[максимальное кол-во вопросов в текущей ветке])

Чтобы найти количество пройденных/оставшихся шагов на конкретном вопросе ("узле"), нужно следовать от каждого "узла" "дерева" к "корню" "дерева" (к началу теста/опроса) и считать количество связей и сразу маркировать "рёбра" максимально-возможным значением "глубины" данной "ветки" от текущего "узла".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы