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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2012, 12:34   #1
Dex999
Новичок
Джуниор
 
Регистрация: 25.01.2012
Сообщений: 1
По умолчанию удаления из дерева

Здравствуйте. Я написал программу, но не совсем правильно.Помогите довести ее до ума.

Код:
program L1_3;
type 
bt = integer; 
u = ^zveno; 
zveno = record
    i: bt; L, R: u end;
var T: u; a, b: byte; x: bt;
{ function udal (T:u; x:bt):u;
Var p,v:u;
begin if T=nil then writeln ('element ne naiden')
else if x<T^.i
then T^.L:=udal(T^.L,x)
else if x>T^.i
then T^.R:=udal(T^.R,x)
else begin p:=T;
if T^.L=nil
then T:=T^.L
else if T^.R=nil
then T:=T^.R
else begin V:=T^.L;
while V^.R^.R<>nil do
V:=V^.R;
T^.i:=V^.R^.i;
p:=V^.R;
V^.R:=V^.R^.L; end;
dispose(p); end;
udal:=T;
end; }

procedure Del(var t: u; x: bt);
var p: u;

  procedure D1(var rp: u);
  begin
    if rp^.R <> nil then d1(rp^.R) else
    begin
      p^.i := rp^.i;
      p := rp;
{if rp^.l<>NIL then } rp := rp^.l;
      dispose(p);
    end;
  end;

begin
  if t = nil then writeln('elenenta net')
  else if x < t^.i then del(t^.L, x)
  else if x > t^.i then del(t^.R, x)
  else begin
    p := t;
    if p^.r = nil then begin
      t := p^.l;
      dispose(p);
    end
    else if p^.L = nil
      then begin
      t := p^.R;
      dispose(p); end
    else d1(p^.L)
  end;
end;

procedure poisk(T: u);
var x: bt;
begin if T <> nil then begin
    poisk(T^.L);
    if T^.i mod 2 = 0
      then begin x := T^.i; del(T, x) end;
    poisk(T^.R) end;
end;

procedure V_Der(var T: u; x: bt);
begin if T = nil then begin new(T);
    T^.i := x; T^.L := nil; T^.R := nil; end
  else if x < T^.i
    then V_Der(T^.L, x)
  else V_Der(T^.R, x)
end;

procedure print(T: u);
begin if T <> nil then begin
    print(T^.L);
    Write(T^.i: 5);
    print(T^.R); end;
end;


begin
  randomize;
  b := 1 + random(20);
  for a := 1 to b do begin
    x := -20 + random(40);
    V_Der(T, x); end;
  Write('primal tree ');
  print(T); writeln;
{if T<>nil
then while if T^.i mod 2=0
then udal(T,T^.i);
{ else begin poisk:=poisk (T^.L); poisk:=poisk(T^.R) end
end;}
  poisk(T);
  Write('new tree ');
  print(T); writeln;
  readln;
end.
Заранее спасибо!



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.01.2012 в 13:14.
Dex999 вне форума Ответить с цитированием
Старый 26.01.2012, 09:08   #2
zmey31313
Форумчанин
 
Регистрация: 19.11.2009
Сообщений: 155
Сообщение

Опиши подробно что она должна делать для начала, потом оформи код, что-бы он читался нормально, а только лишь потом проси чтоб посмотрели, в чём проблема или ты думаешь комуто охото копаться в таком коде?
По всем вопросам связанным с Делфи или Паскаль обращайтесь, чем смогу тем и помогу.
Помог жми на весы!!!
dmi83206389@mail.ru
zmey31313 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++(удаления узла) Xaceo Помощь студентам 1 28.03.2011 18:05
условие для удаления узлов дерева [java] ArniLand Помощь студентам 0 23.09.2010 19:50
условие для удаления узлов дерева ArniLand Общие вопросы по Java, Java SE, Kotlin 0 23.09.2010 19:50
Защита от удаления Михаил Юрьевич Общие вопросы Delphi 2 22.01.2010 22:48
процедуры переворотов, добавления, удаления элемента.. для AVL дерева smalsvoloch Помощь студентам 0 03.12.2009 20:28