Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.05.2009, 13:35   #1
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
Вопрос Удаление вершины в бинарном дереве

Помогите найти ошибку в роцедуре удаления вершины
Код:
procedure DeleteNode(var root:PTree; n:Integer);
var
  x,y:Integer;
  T:Ptree;
 {фунцкция находит самый левый элемент в правом поддереве удаляемой вершины}
  function SearchDelete (root:PTree):PTree
  begin
    If root^.Left<>NIL Then
       root:=SearchDelete(root^.left)
    Else
      SearchDelete:=root;
  end;

begin
  If root<>NIL Then
  Begin
    val(root^.number,x,y);
    If x=n Then
    begin
      If (root^.left=NIL) and (root^.right=NIL) Then
        root:=NIL
      Else
      If (root^.left<>NIL) and (root^.right=NIL) Then
        root:=root^.left
      Else
      If (root^.left=NIL) and (root^.right<>NIL) Then
        root:=root^.right
      Else
      If (root^.left<>NIL) and (root^.right<>NIL) Then
      Begin
         T^.right:=root^.right;
         T^.left:=root^.left;
         root:SearchDelete(root^.right);
         root^.right:=T^.right;
         root^.left:=T^.left;
      end;
    end
    Else
    If x<n Then
      DeleteNode(root^.left,n)
    else
    If x>n Then
      DeleteNode(root^.right,n)
  end
  Else
    writeln('Error');
end;
Найди цель, ресурсы найдутся.

Последний раз редактировалось lebrosha; 24.05.2009 в 13:40.
lebrosha вне форума
Старый 24.05.2009, 13:46   #2
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Код:
TYPE BT=integer;
     U = ^BinTree;
     BinTree = Record
         Inf : BT;
         L,R : U;
END;

function Delete(Tree: U; x: BT) : U;
var P, v : U;
begin
   if (Tree=nil)
   then writeln('такого элемента в дереве нет!')
   else if x < Tree^.inf then Tree^.L := Delete(Tree^.L, x) {случай 1}
                         else
                          if x > Tree^.inf
                          then Tree^.R := Delete(Tree^.R, x) {случай 1}
                          else
                          begin {случай 1}
                           P := Tree;
                           if Tree^.R=nil
                           then Tree:=Tree^.L
                           else if Tree^.L=nil
                                then Tree:=Tree^.R
                                else begin
                                      v := Tree^.L;
                                      while v^.R^.R <> nil do v:= v^.R;
                                      Tree^.inf := v^.R^.inf;
                                      P := v^.R;
                                      v^.R :=v^.R^.L;
                                     end;
                           dispose(P);
                          end;
Delete := Tree
end;
Жми на весы!!!
Chudo4258 вне форума
Старый 24.05.2009, 13:51   #3
lebrosha
Пользователь
 
Аватар для lebrosha
 
Регистрация: 21.05.2009
Сообщений: 36
По умолчанию

благодарю!!!
Найди цель, ресурсы найдутся.
lebrosha вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как посмотреть файл в бинарном виде? JamS007 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 12.05.2009 21:58
помогите с индексами в дереве! Анастасия123456789 Общие вопросы Delphi 1 26.11.2008 15:26
как в дереве ставятся индексы.. Анастасия123456789 Общие вопросы Delphi 12 24.11.2008 16:33
Удаление файлов Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.05.2008 14:46
Подскажите как прописывать Item, в дереве Tree View, чтобы при выдлении в Мемо загружался файл Yurek Компоненты Delphi 5 08.11.2007 22:49