generic
    type Tree is private;
    type Child is (<>);
    Left_Child : in Child;
    Right_Child : in Child;
    with function Is_Null (The_Tree : in Tree) return Boolean;
    with function Child_Of
                     (The_Tree : in Tree; The_Child : in Child) return Tree;
package Tree_Search_Binary is

    generic
        with procedure Process (The_Tree : in Tree; Continue : out Boolean);
    procedure Traverse_Pre_Order (The_Tree : in Tree);

    generic
        with procedure Process (The_Tree : in Tree; Continue : out Boolean);
    procedure Traverse_In_Order (The_Tree : in Tree);

    generic
        with procedure Process (The_Tree : in Tree; Continue : out Boolean);
    procedure Traverse_Post_Order (The_Tree : in Tree);

end Tree_Search_Binary;