Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обход бинарного дерева, Найти самый левый непустой лист дерева 
:(
    Опции темы
Vandalko
Дата 18.5.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Цитата

....элемент из самого левого листа непустого дерева Т (лист—вершина, из которой не выходит ни одной ветви);


Вот и вопрос - как найти этот самый левый лист ?

Уже есть некоторое решение:

Код

procedure PrintByLevel(level: integer;
          var items: array of TTree; count: integer);
var i, new_count: integer;
begin
  if count <> 0 then begin

    writeln('level = ', level);
    new_count := 0;
    for i := 0 to pred(count) do begin
      write(items[i]^.value:4);
      if items[i]^.left <> nil then begin
        inc(new_count); items[count + new_count - 1] := items[i]^.left;
      end;
      if items[i]^.right <> nil then begin
        inc(new_count); items[count + new_count - 1] := items[i]^.right;
      end;
    end;
    writeln;
    move(items[count], items[0], new_count*sizeof(TTree));
    PrintByLevel(level + 1, items, new_count);

  end;
end;


И вызивается она так:

Код

var
  arr: array[0 .. pred(size)] of TTree; { <--- Здесь должно быть достаточно места для хранения }

begin
  { Заполнение дерева }
  ...
  arr[0] := root;
  PrintByLevel(0, arr, 1);
  ...
end.


Но что это за pred() и sizeof() ?  smile 
Взято с  http://volvo71.narod.ru/faq_folder/bin_tree.htm



Это сообщение отредактировал(а) Vandalko - 18.5.2009, 13:30
PM MAIL WWW ICQ   Вверх
cemick
Дата 18.5.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 6



Дак тогда же можно просто перебором в цикле:

Код

Node: TNode;

Node := tree.Top;
while Node^.Left <> nil do
  Node  := Node^.Left;


В конце перебора он дойдет до самого левого узла.. 
PM MAIL WWW   Вверх
volvo877
Дата 19.5.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Vandalko @  18.5.2009,  13:20 Найти цитируемый пост)
Но что это за pred() и sizeof()
У тебя хелп отключен что-ли в Паскале? Подведи  курсор к интересующему тебя слову, и нажми на Ctrl+F1...

И при чем тут вообще моя процедура к твоему заданию? Никакой связи не вижу... Процедура по уровням печатает дерево, а не находит какой-то там левый лист...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.