this is the nonrecursive traversal that saves the path to the root
printtree(ptree) /* Prints the info field values of all nodes of the binary tree tree. */ binarytreepointer *ptree; { binarytreepointer null,p,q,rightpointer; binarytreepointer setnull(),left(),right(),item(); stack s1; null = setnull(); setstack(&s1); p = *ptree; while ((p != null) || !empty(&s1)) if (p != null) { printnode(ptree,p); if (left(p) != null) { push(p,&s1); p = left(p); } else { push(p,&s1); p = right(p); } } else { do { pop(&s1,&q); if (!empty(&s1)) rightpointer = right(item(&s1)); else rightpointer = null; }while(!empty(&s1) && (q == rightpointer)); if (q != rightpointer) p = rightpointer; } }