program main;
type
Node = record
data : integer ;
left : ^ Node;
right : ^ Node
end ;
pNode = ^ Node;
procedure push( var root : pNode; data : integer ) ;
var
r : pNode;
begin
if root = nil then begin
new ( r) ;
r^ . data : = data;
r^ . left : = nil ;
r^ . right : = nil ;
root : = r
end else if data < root^ . data then
push( root^ . left , data)
else
push( root^ . right , data)
end ;
function pop( var root : pNode; var data : integer ) : boolean ;
var
r : pNode;
begin
if root = nil then
pop : = false
else if root^ . left <> nil then
pop : = pop( root^ . left , data)
else begin
r : = root;
root : = r^ . right ;
data : = r^ . data ;
dispose ( r) ;
pop : = true
end
end ;
type BinTree = class
private
root : pNode;
public
constructor Create( ) ;
procedure pushNode( data : integer ) ;
function popNode( var data : integer ) : boolean ;
end ;
constructor BinTree. Create ( ) ;
begin
root : = nil
end ;
procedure BinTree. pushNode ( data : integer ) ;
begin
push( root, data) ;
end ;
function BinTree. popNode ( var data : integer ) : boolean ;
begin
popNode : = pop( root, data) ;
end ;
const
N = 10 ;
MAX = 1000 ;
var
root : BinTree;
data, i : integer ;
begin
root : = BinTree. Create ;
randomize;
i : = 0 ;
while ( i < 10 ) do begin
data : = random( MAX) ;
root. pushNode ( data) ;
i : = i + 1
end ;
while ( root. popNode ( data) = true ) do
writeln ( data) ;
root. Free
end .
{ end }
cHJvZ3JhbSBtYWluOwoKdHlwZQogIE5vZGUgPSByZWNvcmQKICAgIGRhdGEgOiBpbnRlZ2VyOwogICAgbGVmdCA6IF5Ob2RlOwogICAgcmlnaHQgOiBeTm9kZQogIGVuZDsKICBwTm9kZSA9IF5Ob2RlOwoKcHJvY2VkdXJlIHB1c2godmFyIHJvb3QgOiBwTm9kZTsgZGF0YSA6IGludGVnZXIpOwp2YXIKICByIDogcE5vZGU7CmJlZ2luCiAgaWYgcm9vdCA9IG5pbCB0aGVuIGJlZ2luCiAgICBuZXcocik7CiAgICByXi5kYXRhIDo9IGRhdGE7CiAgICByXi5sZWZ0IDo9IG5pbDsKICAgIHJeLnJpZ2h0IDo9IG5pbDsKICAgIHJvb3QgOj0gcgogIGVuZCBlbHNlIGlmIGRhdGEgPCByb290Xi5kYXRhIHRoZW4KICAgIHB1c2gocm9vdF4ubGVmdCwgZGF0YSkKICBlbHNlCiAgICBwdXNoKHJvb3ReLnJpZ2h0LCBkYXRhKQplbmQ7CgpmdW5jdGlvbiBwb3AodmFyIHJvb3QgOiBwTm9kZTsgdmFyIGRhdGEgOiBpbnRlZ2VyKSA6IGJvb2xlYW47CnZhcgogIHIgOiBwTm9kZTsKYmVnaW4KICBpZiByb290ID0gbmlsIHRoZW4KICAgIHBvcCA6PSBmYWxzZQogIGVsc2UgaWYgcm9vdF4ubGVmdCA8PiBuaWwgdGhlbiAKICAgIHBvcCA6PSBwb3Aocm9vdF4ubGVmdCwgZGF0YSkKICBlbHNlIGJlZ2luCiAgICByIDo9IHJvb3Q7CiAgICByb290IDo9IHJeLnJpZ2h0OwogICAgZGF0YSA6PSByXi5kYXRhOwogICAgZGlzcG9zZShyKTsKICAgIHBvcCA6PSB0cnVlCiAgZW5kCmVuZDsKCnR5cGUgQmluVHJlZSA9IGNsYXNzCiAgcHJpdmF0ZQogICAgcm9vdCA6IHBOb2RlOwogIHB1YmxpYwogICAgY29uc3RydWN0b3IgQ3JlYXRlKCk7CiAgICBwcm9jZWR1cmUgcHVzaE5vZGUoZGF0YSA6IGludGVnZXIpOwogICAgZnVuY3Rpb24gcG9wTm9kZSh2YXIgZGF0YSA6IGludGVnZXIpIDogYm9vbGVhbjsKICBlbmQ7Cgpjb25zdHJ1Y3RvciBCaW5UcmVlLkNyZWF0ZSgpOwpiZWdpbgogIHJvb3QgOj0gbmlsCmVuZDsKCnByb2NlZHVyZSBCaW5UcmVlLnB1c2hOb2RlKGRhdGEgOiBpbnRlZ2VyKTsKYmVnaW4KICBwdXNoKHJvb3QsIGRhdGEpOwplbmQ7CgpmdW5jdGlvbiBCaW5UcmVlLnBvcE5vZGUodmFyIGRhdGEgOiBpbnRlZ2VyKSA6IGJvb2xlYW47CmJlZ2luCiAgcG9wTm9kZSA6PSBwb3Aocm9vdCwgZGF0YSk7CmVuZDsgIAoKY29uc3QKICBOID0gMTA7CiAgTUFYID0gMTAwMDsKdmFyCiAgcm9vdCA6IEJpblRyZWU7CiAgZGF0YSwgaSA6IGludGVnZXI7CmJlZ2luCiAgcm9vdCA6PSBCaW5UcmVlLkNyZWF0ZTsKICByYW5kb21pemU7CiAgaSA6PSAwOwogIHdoaWxlIChpIDwgMTApIGRvIGJlZ2luCiAgICBkYXRhIDo9IHJhbmRvbShNQVgpOwogICAgcm9vdC5wdXNoTm9kZShkYXRhKTsKICAgIGkgOj0gaSArIDEKICBlbmQ7CiAgd2hpbGUgKHJvb3QucG9wTm9kZShkYXRhKSA9IHRydWUpIGRvCiAgICB3cml0ZWxuKGRhdGEpOwogIHJvb3QuRnJlZQplbmQuCnsgZW5kIH0K
compilation info
prog.pas: In procedure `push':
prog.pas:22: error: type mismatch in argument 1 of `push'
prog.pas:11: error: routine declaration
prog.pas:24: error: type mismatch in argument 1 of `push'
prog.pas:11: error: routine declaration
prog.pas: In function `pop':
prog.pas:34: error: type mismatch in argument 1 of `pop'
prog.pas:27: error: routine declaration
prog.pas: In main program:
prog.pas:85: error: record, schema or object has no field named `Free'
stdout