![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 29.04.2009
Сообщений: 5
|
![]()
Сформировать двоичное дерево поиска из целых чисел. Удалить из него элемент, равный введенному пользователем. Результат вывести, используя обход сверху вниз.
Программа формирует дерево, удаляет элемент и выводит. Проблема в том что выводит не то, что должна выводить, то есть "левые" цифры. Исправить сам никак не могу. ниже код program laba13; type TreePointer = ^tree; tree = record data: char; left: TreePointer; right:TreePointer; end; function Stree(root,r:TreePointer;data:char) :TreePointer;{//функкцика} begin if r=nil then begin new(r); { получить новую вершину } r^.left:=nil; r^.right:=nil; r^.data:=data; if data<root^.data then root^.left:=r else root^.right:=r; STree:=r; end else begin if data<r^.data then STree:=STree(r, r^.left, data) else STree:=STree(r, r^.right, data); end; end; function DTree(root:TreePointer;key:char):Tr eePointer;{//функция удая вершина корнем поддерев} var temp,temp2:TreePointer; begin if root^.data = key then begin if root^.left=root^.right then begin dispose(root); DTree:= nil; end else if root^.left=nil then begin temp := root^.right; dispose(root); DTree := temp; end else if root^.right=nil then begin temp := root^.left; dispose(root); DTree := temp; end else begin { имеются два листа } temp2 := root^.right; temp := root^.right; while temp^.left <> nil do temp := temp^.left; temp^.left := root^.left; dispose(root); DTree := temp2; end; begin if root^.data < key then root^.right := DTree(root^.right, key) else root^.left := DTree(root^.left, key); DTree := root; end; end; end; procedure PrintTree(r: TreePointer;n: integer);{ //процедура вывода элементов дерева} var i:integer; begin if r<>nil then begin PrintTree(r^.left, n+1); for i := 1 to n do begin Write(' '); Writeln(r^.data); end; PrintTree(r^.right, n+1); end; end; Var root, dummy: TreePointer; r: char; Begin WriteLn('Isert the elements of tree or 0 to quit');{//считываем цифры в дерево, пока пользователь не введет 0 } repeat ReadLn(r); if root= nil then root := STree(root, root, r ) else dummy := STree(root, root, r); until r='0'; WriteLn('Insert the element to delete'); Readln(r); dummy:=Dtree(root,r);{//удаляем введенную вершниу } PrintTree(root,0);{//печатаем на экране } end. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Двоичные деревья | Raz0r | Помощь студентам | 7 | 11.12.2011 10:32 |
Двоичные деревья. 3 задачки. Срочно | rustam29 | Фриланс | 9 | 13.06.2009 18:02 |
Динамические структуры данных. Стеки. Очереди. Двоичные деревья. | Paulo | Помощь студентам | 0 | 30.04.2009 06:12 |