The Ada Program: tree.adb

  1 -- tree.adb:  preorder traversal of binary tree
  2 
  3 with Ada.Text_IO, Ada.Integer_Text_IO;
  4 use Ada;
  5 
  6 procedure Tree is
  7 
  8    type Node;
  9    type Tree is access Node;
 10    Null_Tree : constant Tree := null;
 11    type Node is record
 12       Item:  Integer;
 13       Left:  Tree;
 14       Right: Tree;
 15    end record;
 16 
 17    procedure Preorder (T: Tree) is
 18    begin
 19       if (T/=null) then
 20          Integer_Text_IO.Put (T.Item);
 21          Text_IO.New_Line;
 22          Preorder (T.Left);
 23          Preorder (T.Right);
 24       end if;
 25    end Preorder;
 26 
 27    procedure Insert (I: Integer; T: in out Tree) is
 28    begin
 29       if T=null then
 30          T := new Node'(I, null, null);
 31       elsif I<T.Item then
 32          Insert (I, T.Left);
 33       else
 34          Insert (I, T.Right);
 35       end if;
 36    end Insert;
 37 
 38    type Item_Array is array (Integer range <>) of Integer;
 39 
 40    procedure Insert (A: Item_Array; T: in out Tree) is
 41    begin
 42       for I in A'Range loop
 43          Insert (A(I), T);
 44       end loop;
 45    end Insert;
 46 
 47    T    : Tree := null;
 48    Data : constant Item_Array := (16,5,2,8,7,19,18,22,20,21,23);
 49 
 50 begin
 51    Insert (Data, T);
 52    Preorder (T);
 53 end Tree;