// **************************************************************************
// * TraverseInorder ()                                                     *
// **************************************************************************
// *                                                                        *
// **************************************************************************
// * Inputs  -                                                              *
// *                                                                        *
// * Output  -                                                              *
// **************************************************************************

static	void                TraverseInorder         (
								TreeNode_T *        pcl__Tree)

	{
	// Local Variables.

	// Empty tree ?

	if (pcl__Tree == NULL) return;

	// Perform non-recursive inorder sort.

	push(NULL);

	for (;;)
		{
		// Process the bigger nodes.

		while (pcl__Tree != NULL)
			{
			push(pcl__Tree);

			pcl__Tree = pcl__Tree->pcl__bigger;
			}

		if ((pcl__Tree = pop()) == NULL) break;

		// Write out the current node.

		visit(pcl__Tree);

		// Process the lesser nodes.

		pcl__Tree = pcl__Tree->pcl__lesser;
		}

	// All done.

	return;
	}



// **************************************************************************
// * TraversePreorder ()                                                    *
// **************************************************************************
// *                                                                        *
// **************************************************************************
// * Inputs  -                                                              *
// *                                                                        *
// * Output  -                                                              *
// **************************************************************************

static	void                TraversePreorder        (
								TreeNode_T *        pcl__Tree)

	{
	// Local Variables.

	// Empty tree ?

	if (pcl__Tree == NULL) return;

	// Perform non-recursive preorder traversal.

	push(NULL);
	push(pcl__Tree);

	while ((pcl__Tree = pop()) != NULL)
		{
		visit(pcl__Tree);

		if (pcl__Tree->pcl__lesser != NULL) push(pcl__Tree->pcl__lesser);
		if (pcl__Tree->pcl__bigger != NULL) push(pcl__Tree->pcl__bigger);
		}

	// All done.

	return;
	}




// **************************************************************************
// * TraversePostorder ()                                                   *
// **************************************************************************
// *                                                                        *
// **************************************************************************
// * Inputs  -                                                              *
// *                                                                        *
// * Output  -                                                              *
// **************************************************************************

static	void                TraversePostorder       (
								TreeNode_T *        pcl__Tree)

	{
	// Local Variables.

	// Perform non-recursive postorder traversal.

	if (pcl__Tree->pcl__bigger != NULL) traverse(pcl__Tree->pcl__bigger);
	if (pcl__Tree->pcl__lesser != NULL) traverse(pcl__Tree->pcl__lesser);

	visit(pcl__Tree);

	// All done.

	return;
	}

//
//
//

static	void                TraversePostorder       (
								TreeNode_T *        pcl__Tree)

	{
	// Local Variables.

	// Perform non-recursive postorder traversal.

	state = 0;

	1:

	if (state == 0)
		{
		if (pcl__Tree->pcl__bigger != NULL)
			{
			push (pcl__Tree);
			push (1);

			pcl__Tree = pcl__Tree->pcl__bigger;
			state     = 0;

			goto 1;
			}
		}

	if (state == 1)
		{
		if (pcl__Tree->pcl__lesser != NULL)
			{
			push (pcl__Tree);
			push (2);

			pcl__Tree = pcl__Tree->pcl__lesser;
			state     = 0;

			goto 1;
			}
		}

	if (state == 2)
		{
		visit(pcl__Tree);
		}

	pop(state);
	pop(pcl__Tree);

	goto 1;

	// All done.

	return;
	}









