![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
biv171 |
![]() ![]()
Сообщение
#1
|
|||
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
здравствуйте,помогите если можете...задача у меня простая,но я че-то недогоняю, у меня есть бинарное дерево,я читаю данные с клавиатуры и хочу вывести мое дерево на экран,скажите в чем тут моя ошибка и как ее исправить?(я знаю что у вас есть ссылки на готовую прогу на бинарные деревья,где уже имеется процедура печати,но мне не хочется плагиатить-хочется разобраться в чем я не прав,так сказать научиться)
program derevo;
|
|||
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Обходишь дерево, находишь элемент с заданным значением, и применяешь к его левому потомку рекурсивную процедуру удаления поддерева... Ты ее реализовал, я надеюсь?
|
biv171 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Обходишь дерево, находишь элемент с заданным значением, и применяешь к его левому потомку рекурсивную процедуру удаления поддерева... Ты ее реализовал, я надеюсь? на данном этапе,я встал вступр в случае если корень входит в удаленное значение...вот что у меня получилось.. Код uses crt; end.const dely=2; btw=1; type pstruct=^struct; struct= record inf:integer; left,right:pstruct; end; var n,y,x,w,m,start_x,start_y:integer; tree:pstruct; z:struct; q:byte; procedure newd(var p:pstruct;x:integer); begin new(p); p^.inf:=x; p^.left:=nil; p^.right:=nil; end; procedure zapolnenie(var tec:pstruct;n:integer); begin if tec=nil then newd(tec,n) else with tec^ do begin if inf<n then zapolnenie(right,n) else if inf>n then zapolnenie(left,n) end; end; procedure print(tec:pstruct;level:integer;l,c,r:integer); function min(a,b:integer):integer; begin min:=a; if b < a then min:=b; end; function center(a,b:integer):integer; begin center:=min(a,B)+abs( a - B) div 2; end; var pos_y:integer; begin pos_y:=start_y+ pred(level)*dely; if tec^.left<>nil then begin gotoxy(center(c, center(c+btw,r-btw)),pos_y+1); write('\'); print(tec^.left,level+1,c+btw, center(c+btw,r-btw),r-btw); end; if tec^.right<>nil then begin gotoxy(center(c,center(l+btw,c-btw)),pos_y+1); write('/'); print(tec^.right,level+1,l+btw,center(l+btw,c-btw),c-btw); end; gotoxy(c,pos_y); write(tec^.inf); end; procedure delete(var tec:pstruct;ta:byte); begin if tec<>nil then begin if (tec^.right<>nil) and (ta>tec^.inf) then delete(tec^.right,ta); if (tec^.left<>nil) and (ta>tec^.inf) then delete(tec^.left,ta) else delete(tec^.left,ta); dispose(tec); tec:=nil; end; end; procedure obxod(var tec:pstruct;ta:byte); var old:pstruct; begin if ta<tec^.inf then obxod(tec^.left,ta) else if ta>tec^.inf then delete(tec,ta) else obxod(tec^.left,ta); end; begin clrscr; tree:=nil; start_x:=40; start_y:=1; while not eoln do begin read(n); zapolnenie(tree,n); end; print(tree,1,0,40,80); readkey; clrscr; write('ydalenie = '); readln(q); obxod(tree,q); print(tree,1,0,40,80); readkey; Сообщение отредактировано: biv171 - 21.11.2008 17:17 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:47 |