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    type Node is record
 11       Item:  Integer;
 12       Left,Right:  Tree;
 13    end record;
 14 
 15    procedure Preorder (T: Tree) is
 16    begin
 17       if (T/=null) then
 18          Integer_Text_IO.Put (T.Item);
 19          Text_IO.New_Line;
 20          Preorder (T.Left);
 21          Preorder (T.Right);
 22       end if;
 23    end Preorder;
 24 
 25    procedure Inorder (T: Tree) is
 26    begin
 27       if (T/=null) then
 28          Inorder (T.Left);
 29          Integer_Text_IO.Put (T.Item);
 30          Text_IO.New_Line;
 31          Inorder (T.Right);
 32       end if;
 33    end Inorder;
 34 
 35    procedure Insert (I: Integer; T: in out Tree) is
 36    begin
 37       if T=null then
 38          T := new Node'(I, null, null);
 39       elsif I<T.Item then
 40          Insert (I, T.Left);
 41       else
 42          Insert (I, T.Right);
 43       end if;
 44    end Insert;
 45 
 46    type Item_Array is array (Integer range <>) of Integer;
 47 
 48    procedure Insert (A: Item_Array; T: in out Tree) is
 49    begin
 50       for I in A'Range loop
 51          Insert (A(I), T);
 52       end loop;
 53    end Insert;
 54 
 55    T    : Tree := null;
 56    Data : constant Item_Array := (16,5,2,8,7,19,18,22,20,21,23);
 57 
 58 begin
 59    Insert (Data, T);
 60    Preorder (T);
 61    Inorder (T);
 62 end Tree;