помогите написать процедуру, определяющую, является ли дерево сбалансированным, т. е. высоты левых и правых поддеревьев отличаются не более чем на 1
volvo
3.05.2005 13:15
Это для чего? Если для AVL Trees то эти 2 функции я выдрал как раз оттуда...
function TNode.Height: integer; var leftHeight, rightHeight: integer; begin if LEFT = nil then leftHeight := 0 else leftHeight := LEFT^.Height;
if RIGHT = nil then rightHeight := 0 else rightHeight := RIGHT^.Height;
Height := 1 + MAX(leftHeight, rightHeight) end;
{ это сама проверка } function TNode.Check: boolean; var valid: boolean; leftHeight, rightHeight: integer; diffHeight: integer; begin valid := True; { verify that subtrees are correct } if LEFT <> nil then valid := valid and LEFT^.Check; if RIGHT <> nil then valid := valid and RIGHT^.Check;
{ Now get the height of each subtree } if LEFT = nil then leftHeight := 0 else leftHeight := LEFT^.Height;
if RIGHT = nil then rightHeight := 0 else rightHeight := RIGHT^.Height;
{ Verify that tree is balanced } diffHeight := rightHeight - leftHeight; if abs(diffHeight) > 1 then begin valid := false; writeln('Height difference is ', diffHeight) end; end;
Вот так...
Lilu 6 i
3.05.2005 13:22
Цитата(Lilu 6 i @ 3.05.05 13:02)
помогите написать процедуру, определяющую, является ли дерево сбалансированным, т. е. высоты левых и правых поддеревьев отличаются не более чем на 1
СПАСИБО.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.