На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Бинарное дерево поиска (горизонтальный обход) + queue(FIFO)
    Всем хай! Сходу к делу!

    Задано бинарное дерево поиска. Нужно, используя структуру Queue(FIFO, очередь), сделать поуровневый обход с выводом на экран (горизонтальная печать дерева).

    На рис. представлен пример бинарки + результат.
    Прикреплённая картинка
    Прикреплённая картинка


    Мне непонятно здесь, как правильно задействовать очередь.

    Что хочется сделать.
    1. запустить симметричный обход дерева, записывая ключи дерева в очередь (ASC - по возрастанию).
    Получится такая очередь: -10, 16, 17, 28, 29, 33, 50, 73, 86, 88, 90.

    Также нужно дополнительно учесть уровень, на котором находится считываемый узел, поэтому запомним и эту информацию в элементах очереди:
    Очередь из элементов: -10(2), 16(3), 17(1), 28(2), 29(4), 33(3), 50(0), 73(1), 86(3), 88(4), 90(2)

    Прототип функции обхода дерева такой примерно:
    ExpandedWrap disabled
      void LKP(TElem* proot, int plevel);   // proot - указатель на текущее поддерево, plevel - уровень обрабатываемого узла


    В принципе, вот в принципе, дальше можно бегать по очереди и распечатывать сначала все узлы с уровнем = 0, затем все узлы с уровнем = 1 и т.д. Но во-первых, классическая очередь не имеет встроенной операции сканирования своих элементов (можно удалить из начала и вставить в конец), а во-вторых, зачем тогда сдалась очередь для подобной обработки - подошел бы простой одномерный массив (удобнее в разы, т к есть встроенный индексатор).

    Подскажите, как правильно использовать ОЧЕРЕДЬ для решения поставленной задачи??

    спс. за внимание
      Ты предлагаешь обход дерева в глубину, но раз в задании говорится про очередь и вывод дерева по уровням, значит нужен обход в ширину. Заводим очередь (односвязный список), в которой изначально лежит корневой узел дерева, затем в цикле берем первый узел из очереди, выводим его и добавляем в конец списка дочерние узлы (если есть) слева направо, повторяем, пока очередь не опустеет.
        Цитата AVA12 @
        Ты предлагаешь обход дерева в глубину, но раз в задании говорится про очередь и вывод дерева по уровням, значит нужен обход в ширину. Заводим очередь (односвязный список), в которой изначально лежит корневой узел дерева, затем в цикле берем первый узел из очереди, выводим его и добавляем в конец списка дочерние узлы (если есть) слева направо, повторяем, пока очередь не опустеет.

        ааааааааааааа, вот оно как)
        я чегот совсем забыл про "BFS" в деревьях, т к их не принято так обходить...

        ну, значит, такие будут структуры данных:

        1. элемент бинарки
        ExpandedWrap disabled
          struct TNode
          {
            int key;
            TNode* left;
            TNode* right;
          };


        2. элементы очереди
        ExpandedWrap disabled
          struct Telem
          {
            int key;
            TElem* next;
            int level;    // вроде он тут нужен...хм...подумаю еще
          };


        спс AVA12
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0986 ]   [ 17 queries used ]   [ Generated: 19.04.24, 08:03 GMT ]