![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
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. |
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 6:26 |