Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 2.52 KB | None | 0 0
  1. procedure Traverse (Tree  : in out Tree_Type;
  2.                        Order : in Traversal_Order) is
  3.  
  4.       x:Integer:=1;
  5.      
  6.       procedure Checked_Process (Element: in out Element_Type) is
  7.          New_Element: Element_Type := Element;
  8.       begin
  9.          Process (New_Element);
  10.          if Key_Of (Element) /= Key_Of (New_Element) then
  11.             Put("No value found!");
  12.             raise No_Key;
  13.          else
  14.             Element := New_Element;
  15.          end if;
  16.       end Checked_Process;
  17.      
  18.      procedure MAX (Element: in out Element_Type) is
  19.          New_Element: Element_Type := Element;
  20.       begin
  21.          if x=1 then
  22.             Process (New_Element);
  23.             x:=0;
  24.          end if;  
  25.          if Key_Of (Element) /= Key_Of (New_Element) then
  26.             Put("No value found!");
  27.             raise No_Key;
  28.          else
  29.             Element := New_Element;
  30.          end if;
  31.       end MAX;
  32.      
  33.            procedure MIN (Element: in out Element_Type) is
  34.          New_Element: Element_Type := Element;
  35.       begin
  36.          if x=0 then
  37.             Process (New_Element);
  38.             x:=1;
  39.          end if;  
  40.          if Key_Of (Element) /= Key_Of (New_Element) then
  41.             Put("No value found!");
  42.             raise No_Key;
  43.          else
  44.             Element := New_Element;
  45.          end if;
  46.       end MIN;
  47.  
  48.  
  49.       procedure Inorder (Tree : in Tree_Type) is
  50.       begin
  51.          if Tree /= null then
  52.             --Put_Line(Retrieve(Tree, Integer));
  53.             Inorder (Tree => Tree.Left);    -- Traverse Left subtree
  54.             Checked_Process (Tree.Info);
  55.             Inorder (Tree => Tree.Right);   -- Traverse Right subtree
  56.          end if;
  57.       end Inorder;
  58.  
  59.       procedure Preorder (Tree : in Tree_Type) is
  60.       begin
  61.          if Tree /= null then
  62.             Inorder (Tree => Tree.Left);    -- Traverse Left subtree
  63.             MIN (Tree.Info);
  64.             Inorder (Tree => Tree.Right);--Traverse Right subtree
  65.          end if;
  66.       end Preorder;
  67.  
  68.       procedure Postorder (Tree : in Tree_Type) is
  69.      
  70.  
  71.       begin
  72.          if Tree /= null then
  73.             Inorder (Tree => Tree.Right);  -- Traverse Left subtree
  74.             MAX (Tree.Info);
  75.             Inorder (Tree => Tree.Left);  -- Traverse Right subtree
  76.          end if;
  77.       end Postorder;
  78.  
  79.    begin -- Traverse
  80.       case Order is
  81.          when Inorder   => Inorder (Tree);
  82.          when Preorder  => Preorder (Tree);
  83.          when Postorder => Postorder (Tree);
  84.       end case;
  85.    end Traverse;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement