Как перевести код из 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.

Ответы (0 шт):