Сформировать двоичное дерево поиска из целых чисел. Удалить из него элемент, равный введенному пользователем. Результат вывести, используя обход сверху вниз.
Программа формирует дерево, удаляет элемент и выводит. Проблема в том что выводит не то, что должна выводить, то есть "левые" цифры. Исправить сам никак не могу.
ниже код
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.
Двоичные деревья в Паскале
Стучите в асю 11один11-5шесть5шесть, обсудим.
ася сейчас не работает(((
давайте тут
давайте тут