|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.05.2008, 18:52 | #1 |
Регистрация: 14.04.2008
Сообщений: 6
|
Деревья. макс высота
нужно вывести на экран поддерево с максимальной высотой от корня. Хелп плз!!
|
26.05.2008, 18:16 | #2 |
Регистрация: 14.04.2008
Сообщений: 6
|
Хелп плз очень нужно
|
26.05.2008, 20:59 | #3 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
У вас два пути.
Первый: выкладываете наработки и вместе исправляем/дополняем. Второй: ничего не выкладываете. Вашу тему перемещают в раздел Фриланс, а там вам указывают цену за работу и ваше дело соглашаться или нет. |
26.05.2008, 21:59 | #4 |
Регистрация: 14.04.2008
Сообщений: 6
|
вот есть прога но там много лишнего..
uses crt; type tree=^node; node=record key: char; left, right: tree; end; var n: integer; root,p: tree; ch, x: char; function createtree(n:integer): tree; var newnode: tree; nl, nr: integer; x: char; begin if n=0 then createtree:=nil else begin nl:=n div 2; nr:=n-nl-1; write('vvedite znachenie'); readln(x); new(newnode); with newnode^ do begin key:=x; left:=createtree(nl); right:=createtree(nr); end; createtree:=newnode; end; end; procedure printtree(t:tree; n:integer); var i: integer; begin if t<>nil then with t^ do begin printtree(right, n+1); write('':4*n); writeln(key); printtree(left,n+1); end; end; function countit (t: tree; l: shortint): shortint; var hl, hr: shortint; begin if t<>nil then begin inc(l); hl:=countit(t^.left,l); hr:=countit(t^.right,l); countit:= l+hl+hr; end else countit:=0; { write(t^.key,l,' ');} end; function nodescount(t: tree): word; begin if t<>nil then nodescount:=1+nodescount(t^.left)+n odescount(t^.right) else nodescount:=0; end; { function getnode (t: tree; side: char): tree; var p:tree; begin if t<>nil then begin if t^.key=ch then begin p:=t; if side='r' then p:=p^.right; if side='l' then p:=p^.left; end else begin getnode:=getnode(t^.left, side); getnode:=getnode(t^.right, side); end; end; getnode:=p; end; } procedure getnode(t: tree; side: char); begin if t<>nil then begin if t^.key=ch then begin p:=t; if side='r' then p:=p^.right; if side='l' then p:=p^.left; end; getnode(t^.left, side); getnode(t^.right, side); end; end; procedure justdoit (t: tree); var lengLeft, lengRight: shortint; begin if t<>nil then begin if t^.key=ch then begin {writeln ('dddd'); writeln( countit(t,-1) );} lengleft:=countit(t^.left,-1); lengright:=countit(t^.right,-1); if lengleft>lengright then begin writeln('naibol''shaya dlina puti u levogo poddereva ', ch, ': ', lengleft); getnode(root,'l'); writeln('kolichestvo uzlov:', nodescount(p)); printtree(p, 0); end; if lengLeft<lengRight then begin writeln('naibol''shaya dlina puti u pravogo poddereva ', ch, ': ', lengright); getnode(root,'r'); writeln('kolichestvo uzlov:', nodescount(p)); printtree(p, 0); end; if lengLeft=lengRight then begin writeln('dlina puti levogo i pravogo podderev''ev ravni:',lengLeft); getnode(root,'l'); writeln('kolichestvo uzlov v kazhdom poddereve ',ch,' ravno:', nodescount(p)); end; end else begin justdoit(t^.left); justdoit(t^.right); end; end; end; function poisktree (t,newt: tree; ch: char): tree; begin if newt=nil then begin new(newt); newt^.left:=nil ; newt^.right:=nil; newt^.key:=ch; if ch< t^.key then t^.left:=newt else t^.right:=newt; poisktree:=newt; end else begin if ch<newt^.key then poisktree:=poisktree(newt, newt^.left, ch) else poisktree:=poisktree(newt, newt^.right, ch); end; end; procedure buildpoisk; var i,j: shortint; ch: char; hzcho: tree; begin root:=nil; repeat write('vvedite znachenie(space-vihod) '); readln (ch); if ch<>' ' then begin if root=nil then root:=poisktree(root,root,ch) else hzcho:=poisktree(root, root, ch); end; until ch=' '; printtree(root, 0); end; procedure menu; begin clrscr; writeln('1. ideal''no sbalansirovannoe derevo'); writeln('2. derevo poiska'); writeln('0. vihod'); readln(x); case x of '1' : begin root:=nil; write('vvdite chislo uzlov:'); readln(n); root:=createtree(n); writeln('sozdano derevo:') ; printtree(root,0); writeln('viberite vershinu:'); readln(ch); justdoit(root); readln; end; '2' : begin root:=nil; buildpoisk; readln; writeln('viberite vershinu:'); readln(ch); justdoit(root); readln; end; '0' : exit; end; menu; end; begin menu; end. |
27.05.2008, 09:32 | #5 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Надеюсь, это Вам поможет:
Для узла нужно определить высоту его максимального поддерева: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Высота таск бара... | Altera | Win Api | 3 | 28.07.2008 10:41 |
Высота taskbar'a | papa_serg | Общие вопросы Delphi | 4 | 25.04.2008 16:44 |
Функция МАКС | aslanbek | Общие вопросы Delphi | 2 | 15.03.2008 14:06 |
Аццкий треугольник и его высота | Crazy D0G | Помощь студентам | 1 | 20.01.2008 18:25 |
Высота RichEdit по количеству строк. | Компоратор | Компоненты Delphi | 2 | 15.05.2007 23:57 |