![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Dunkel_L |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 25 Пол: Мужской Репутация: ![]() ![]() ![]() |
Посмотрел раздел FAQ, нашел дерево с обходами(Но они сделаны через рекурсию). а мне нужен обход через стек,в частости Правый-Левый-Корень (гама-обход) обход.Если не трудно, то помогите, или дайте ссылку ,где можно посмотреть про обходы. [font=Arial]
|
![]() ![]() |
Dunkel_L |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 25 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот написал бинарное дерево с гама-обходом(рекурсивный и обход через стек).Рекурсивный работает,а через стек нет((((.Помагите,в чем ошибка?
Код Uses crt; type ptr = ^node; node = record info : char; llink, rlink : ptr; end; pStack = ^tStack; tStack = record nd : ptr; next : pStack; end; procedure Push (var Stack: pStack; nd: ptr); var StackEl: pStack; begin new (StackEl); StackEl^.next:=Stack; Stack:=StackEl; StackEl^.nd:=nd; end; function Pop (Var Stack: pStack): ptr; var StackEl: pStack; begin pop:=Stack^.nd; StackEl:=Stack; Stack:=StackEl^.next; dispose (StackEl); end; procedure PrintTree( p : ptr; h : integer ); begin if p<>nil then begin PrintTree(p^.llink, h+1); gotoxy(wherex, h); textcolor(yellow); write(p^.info); textcolor(white); PrintTree(p^.rlink, h+1); end; end; function CreateTree( n : integer; var i : integer) : ptr; var newnode : ptr; nl, nr : integer; x : char; begin if n <= 0 then CreateTree := nil else begin nl := n div 2; nr := n - nl - 1; i:=i+1; writeln; write ('Vvedite info uzla ',i,': '); readln(x); new(newnode); newnode^.info := x; newnode^.llink := CreateTree(nl, i); newnode^.rlink := CreateTree(nr, i); CreateTree := newnode; end; end; procedure PLK(p : ptr); begin if p <> nil then begin plk(p^.Rlink); plk(p^.Llink); write(p^.info, ' '); end; end; procedure plkstack(stack : ptr); var root,p:ptr; flag : boolean; pr: boolean; begin p:=root; {stack:=nil;} flag := true; while flag = true do begin while p <> nil do begin Push(p:false); p := p^.llink; end; p := Pop(pr); if pr=true then begin write(p^.info,' '); p:=nil; end else begin Push(p:true); p := p^.rlink; end; if stack=nil then begin flag:=false; end; end; var root : ptr; n,i :integer; begin clrscr; i:=0; writeln('DEREVO'); write('Vvedite kolichestvo uzlov: '); writeln; readln(n); root := CreateTree(n,i); writeln('Psevdograficheskiy risunok: '); PrintTree(root, n+5); gotoxy(1, 2*n+3); writeln('Gama-obhod (rekursiya): '); PLK (root); writeln; writeln('Gama-obhod (stack): '); plkstack(root); readln; end. |
![]() ![]() |
![]() |
Текстовая версия | 13.09.2025 8:12 |