Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Обход бинарного дерева


Автор: Vandalko 18.5.2009, 13:20
Цитата

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


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

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

Код

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


Автор: cemick 18.5.2009, 15:59
Дак тогда же можно просто перебором в цикле:

Код

Node: TNode;

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


В конце перебора он дойдет до самого левого узла.. 

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

И при чем тут вообще моя процедура к твоему заданию? Никакой связи не вижу... Процедура по уровням печатает дерево, а не находит какой-то там левый лист...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)