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
pBinTree = ^ BinTree;
BinTree = object
private
root : pNode;
public
procedure init;
procedure pushNode( data : integer ) ;
function popNode( var data : integer ) : boolean ;
end ;
procedure BinTree. init ;
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 : pBinTree;
data, i : integer ;
begin
new ( root) ;
root^ . init ;
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) ;
dispose ( root) ;
end .
{ end }
cHJvZ3JhbSBtYWluOwoKdHlwZQogIE5vZGUgPSByZWNvcmQKICAgIGRhdGEgOiBpbnRlZ2VyOwogICAgbGVmdCA6IF5Ob2RlOwogICAgcmlnaHQgOiBeTm9kZQogIGVuZDsKICBwTm9kZSA9IF5Ob2RlOwoKcHJvY2VkdXJlIHB1c2godmFyIHJvb3QgOiBwTm9kZTsgZGF0YSA6IGludGVnZXIpOwp2YXIKICByIDogcE5vZGU7CmJlZ2luCiAgaWYgcm9vdCA9IG5pbCB0aGVuIGJlZ2luCiAgICBuZXcocik7CiAgICByXi5kYXRhIDo9IGRhdGE7CiAgICByXi5sZWZ0IDo9IG5pbDsKICAgIHJeLnJpZ2h0IDo9IG5pbDsKICAgIHJvb3QgOj0gcgogIGVuZCBlbHNlIGlmIGRhdGEgPCByb290Xi5kYXRhIHRoZW4KICAgIHB1c2gocm9vdF4ubGVmdCwgZGF0YSkKICBlbHNlCiAgICBwdXNoKHJvb3ReLnJpZ2h0LCBkYXRhKQplbmQ7CgpmdW5jdGlvbiBwb3AodmFyIHJvb3QgOiBwTm9kZTsgdmFyIGRhdGEgOiBpbnRlZ2VyKSA6IGJvb2xlYW47CnZhcgogIHIgOiBwTm9kZTsKYmVnaW4KICBpZiByb290ID0gbmlsIHRoZW4KICAgIHBvcCA6PSBmYWxzZQogIGVsc2UgaWYgcm9vdF4ubGVmdCA8PiBuaWwgdGhlbiAKICAgIHBvcCA6PSBwb3Aocm9vdF4ubGVmdCwgZGF0YSkKICBlbHNlIGJlZ2luCiAgICByIDo9IHJvb3Q7CiAgICByb290IDo9IHJeLnJpZ2h0OwogICAgZGF0YSA6PSByXi5kYXRhOwogICAgZGlzcG9zZShyKTsKICAgIHBvcCA6PSB0cnVlCiAgZW5kCmVuZDsKCnR5cGUKICBwQmluVHJlZSA9IF5CaW5UcmVlOwogIEJpblRyZWUgPSBvYmplY3QKICBwcml2YXRlCiAgICByb290IDogcE5vZGU7CiAgcHVibGljCiAgICBwcm9jZWR1cmUgaW5pdDsKICAgIHByb2NlZHVyZSBwdXNoTm9kZShkYXRhIDogaW50ZWdlcik7CiAgICBmdW5jdGlvbiBwb3BOb2RlKHZhciBkYXRhIDogaW50ZWdlcikgOiBib29sZWFuOwogIGVuZDsKCgpwcm9jZWR1cmUgQmluVHJlZS5pbml0OwpiZWdpbgogIHJvb3QgOj0gbmlsCmVuZDsKCnByb2NlZHVyZSBCaW5UcmVlLnB1c2hOb2RlKGRhdGEgOiBpbnRlZ2VyKTsKYmVnaW4KICBwdXNoKHJvb3QsIGRhdGEpOwplbmQ7CgpmdW5jdGlvbiBCaW5UcmVlLnBvcE5vZGUodmFyIGRhdGEgOiBpbnRlZ2VyKSA6IGJvb2xlYW47CmJlZ2luCiAgcG9wTm9kZSA6PSBwb3Aocm9vdCwgZGF0YSk7CmVuZDsgIAoKY29uc3QKICBOID0gMTA7CiAgTUFYID0gMTAwMDsKdmFyCiAgcm9vdCA6IHBCaW5UcmVlOwogIGRhdGEsIGkgOiBpbnRlZ2VyOwpiZWdpbgogIG5ldyhyb290KTsKICByb290Xi5pbml0OwogIHJhbmRvbWl6ZTsKICBpIDo9IDA7CiAgd2hpbGUgKGkgPCAxMCkgZG8gYmVnaW4KICAgIGRhdGEgOj0gcmFuZG9tKE1BWCk7CiAgICByb290Xi5wdXNoTm9kZShkYXRhKTsKICAgIGkgOj0gaSArIDEKICBlbmQ7CiAgd2hpbGUgKHJvb3ReLnBvcE5vZGUoZGF0YSkgPSB0cnVlKSBkbwogICAgd3JpdGVsbihkYXRhKTsKICBkaXNwb3NlKHJvb3QpOwplbmQuCnsgZW5kIH0K
compilation info
Free Pascal Compiler version 2.2.0 [2009/11/16] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for i386
Compiling prog.pas
prog.pas(6,17) Error: Type "Node" is not completely defined
prog.pas(8,3) Error: Type "Node" is not completely defined
prog.pas(22,20) Error: Incompatible types: got "^<erroneous type>" expected "pNode"
prog.pas(24,21) Error: Incompatible types: got "^<erroneous type>" expected "pNode"
prog.pas(34,26) Error: Incompatible types: got "^<erroneous type>" expected "pNode"
prog.pas(37,14) Error: Incompatible types: got "^<erroneous type>" expected "pNode"
prog.pas(92) Fatal: There were 6 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
stdout