![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Dunkel_L |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 25 Пол: Мужской Репутация: ![]() ![]() ![]() |
Посмотрел раздел FAQ, нашел дерево с обходами(Но они сделаны через рекурсию). а мне нужен обход через стек,в частости Правый-Левый-Корень (гама-обход) обход.Если не трудно, то помогите, или дайте ссылку ,где можно посмотреть про обходы. [font=Arial]
|
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
http://pco.iis.nsk.su/ICP/Practice/dd8-3/node6.html
Цитата Если использовать стек S для хранения текущего пути по дереву, т.е. пути, который начинается в корне дерева и кончается в вершине, посещаемой в данный момент, то можно предложить следующий нерекурсивный алгоритм префиксного обхода ордерева: -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Dunkel_L |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 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. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Push(p:false);Это чего такое? ![]() |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата р с признаком false помещается в стек Я, конечно, извиняюсь, но в Паскале такое НЕ принято. В стек может помещаться то, что он сможет ХРАНИТЬ. А где в описанияхtype ptr = ^node;мы видим хоть одно слово о True/False и вообще о типе Boolean? |
CORS@R |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Рамиль Репутация: ![]() ![]() ![]() |
Все что нужно можешь найти в этом файле
Прикрепленные файлы ![]() |
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
|
-Dunkel_L- |
![]()
Сообщение
#9
|
Гость ![]() |
Всё всем спасибо,разобрался.Теперь можно тему закрыть.
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 11:20 |