Как перевести код из Pascal в С++
Это код с алгоритмом на бинарное дерево, который я собираюсь переписать на С++. Проблема заключается в нескольких незнакомых мне вещей. Мне не понятны те строчки кода, которые я отметил комментарием {не понятно}, их немного. Я не знаю как их переписать на плюсы.
program bintree;
uses crt; {не понятно отсюда}
type pnode=^node;
node=record
data:word;
left:pnode;
right:pnode;
end; {до сюда}
var root:pnode;
key:word;
op:integer;
{poisk po derevy}
function find(root:pnode;key:word;var p,parent:pnode):boolean;
begin
p:=root;{poick nachinaetcia ot kornia}
while p<>nil do
begin
if key=p^.data then{yzel c takim klychom est}
begin find:=true;
exit;
end;
parent:=p;{zapomnit ykazatel pered spyskom}
if key<p^.data then p:=p^.left else p:=p^.right;
end;
find:=false;
end;
{vklychenie v derevo}
procedure insert(var root:pnode;key:word);
var p,parent:pnode;
begin
if find(root,key,p,parent) then begin {не понятно как преобразовать}
writeln('Takoi element yze est');
exit;
end;
{cozdanie novogo elementa}
new(p);
p^.data:=key;
p^.left:=nil;
p^.right:=nil;
if root=nil then root:=p{perviy element}
else if key<parent^.data then parent^.left:=p else parent^.right:=p; {не понятно на момент с key}
end;
{ udalenie iz derdva}
procedure del(var root:pnode;key:word);
var p :pnode;{ydaliaemiy yzel}
parent:pnode;{predok ydaliaemogo yzla}
y :pnode;{yzel,zameniauchiy ydaliaemiy}
{spysk po derevy}
function spysk(p:pnode):pnode;
var y :pnode;{yzel,zameniauchiyydaliaemiy}
pred:pnode; {predok yzla "y"}
begin
y:=p^.right;
if y^.left=nil then y^.left:=p^.left{1}
else begin {2}
repeat
pred:=y;y:=y^.left;
until y^.left=nil;
y^.left:=p^.left;{3}
pred^.left:=y^.right;{4}
y^.right:=p^.right;{5}
end;
spysk:=y;
end;
begin
if not find(root,key,p,parent)then begin{6}
writeln('net takogo elementa');exit;end;
if p^.left=nil then y:=p^.right{7}
else if p^.right=nil then y:=p^.left{8}
else y:=spysk(p);{9}
if p=root then root:=y{10}
else{11}
if key<parent^.data {не понятно также на key}
then parent^.left:=y
else parent^.right:=y;
dispose(p);{12}
end;
{vivod dereva}
procedure print_tree(p:pnode;level:integer);
var i:integer;
begin
if p=nil then exit;
with p^ do begin
print_tree(right,level+1);
for i:=1 to level do write(' ');
writeln(data);
print_tree(left,level+1);
end;
end;
{glavnaya programa}
begin
root:=nil;
while true do begin
writeln('1-vstavka,2-ydalrnie,3-vivod,4-vihod');
readln(op);
case op of
1:begin{vstvka}
writeln('vvesti klych glia vstavki');
readln(key);
insert(root,key);
end;
2:begin {ydalenie}
writeln('vvesti klych dlia ydaleniya: ');
readln(key);
del(root,key);
end;
3:begin {vivod}
clrscr;
if root=nil then writeln('derevo pystoe');
else
print_tree(root,0);
end;
4:exit;
end;
writeln;
end;end.