![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
biba |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Женский Репутация: ![]() ![]() ![]() |
Такая вот задачка.
Эта программа удаляет заданный узел. Но она не удаляет узел вместе с поддеревями ![]() ![]() Код function FIND(Root:ref; kl3:integer; var T{указатель на удаляемый элемент},Parent{его предок}:ref):boolean; begin T:=Root; while T<> nil do begin if kl3=T^.key then begin FIND:=true; exit end; Parent:=T;{запомнить указатель перед спуском} if kl3<T^.key then T:=T^.Left else T:=T^.Right; end; FIND:=False; end; procedure DEL (var Root:ref; kl3:integer); {без поддеревьев} var T:ref; {удаляемый узел} Parent:ref; {предок удаляемого узла} Q:ref; {узел,заменяющий удаляемый} fl:boolean; function SPUSK (var T:ref):ref; {спуск по дереву} var Q:ref;{узел,заменяющий удаляемый} prev:ref; {предок Q} begin Q:=T^.Right; if Q^.Left=nil then Q^.Left:=T^.Left {1} {см стр 148 Павловской} else begin {2} repeat prev:=Q; Q:=Q^.Left; until Q^.Left=nil; Q^.Left:=T^.Left; {3} prev^.Left:=Q^.Right; {4} Q^.Right:=T^.Right; {5} end; SPUSK:=Q; end; begin {ищем ключ} if not FIND (Root,kl3,T,Parent) then begin textcolor(15); gotoxy(25,7); writeln('Такого элемента нет'); textcolor(8); gotoxy(20,11); writeln('Нажмите любую клавишу для продолжения'); readkey; exit; end; if T^.Left=nil then Q:=T^.Right {7} else if T^.Right=nil then Q:=T^.Left {8} else Q:=SPUSK (T); {9} if T=Root then Root :=Q {10} else {11} if kl3 < parent^.key then parent^.Left:=Q else parent^.Right:=Q; DISPOSE (T); {12} end; |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 3:47 |