All pastes #267945 Raw Edit

Something

public text v1 · immutable
·published 2006-12-05 05:56 UTC
rendered paste body
package binarysearchtree is
	type String10 is new String(1..10); 
	
	-- Points to a node in a binary search tree.
	type BinarySearchTreePoint is limited private;

	-- This procedure inserts a node (customer) into the tree in search tree order. If a customer with 
-- duplicate name already customer exist, the new customer should be inserted so they would 
-- appear “after” the older customer when the tree is traversed in inorder.
	-- The tree must be threaded in “inorder.”  The search to locate the position for the new 
-- record must be iterative!
	procedure InsertBinarySearchTree(Root:  in out BinarySearchTreePoint;
				          custName: in String10; custPhone: String10 );

-- customer record if they exist, otherwise a Null pointer is returned (in CustomerPoint).
	-- This procedure locates a customer using a binary search.  A pointer is returned to the
	-- The search must be implemented iteratively.
	procedure FindCustomerIterative(Root: in BinarySearchTreePoint; 
				          CustomerName:  in String10;
				          CustomerPoint:  out BinarySearchTreePoint);
	
	-- This procedure locates a customer using a binary search.  A pointer is returned to the
-- customer record if they exist, otherwise a Null pointer is returned (in CustomerPoint).
	-- The search must be implemented recursively.
	procedure FindCustomerRecursive(Root: in BinarySearchTreePoint; 
				          CustomerName:  in String10;
				          CustomerPoint:  out BinarySearchTreePoint);
	

	-- This function returns the address of the next node in “inorder” taking advantage of threads.
-- The user may enter the  tree at any random location.  This is sometimes called an iteration 
-- function or iterater (no recursion).
	function InOrderSuccessor(TreePoint: in BinarySearchTreePoint) 
		return BinarySearchTreePoint;

	-- Access functions to return customer names and phone numbers.
	function CustomerName(TreePoint: in BinarySearchTreePoint) return String10;
	function CustomerPhone(TreePoint: in BinarySearchTreePoint) return String10;

private
	type Customer is 
		record
			Name:  String10;
			PhoneNumber: String10;
		end record;
	
	type Node;
	type BinarySearchTreePoint is access Node;
	type Node is 
		record
			Llink, Rlink:  BinarySearchTreePoint;
			Ltag, Rtag:  Boolean;  -- True indicates pointer to lower level, False a thread.
			Info:  Customer;
		end record;
end binarysearchtree;