Non-recursive tree traversal
[Code]
# Include
# Include
Using namespace std; typedef struct Node {char key; struct Node * lchild, * rchild;} * Tree, TNode; void PreOrder (Tree T) // first traverse {if (T = NULL) return; TNode * curr = T; // TNode * tmp; stack
S; while (curr! = NULL |! S. empty () {if (curr! = NULL) {cout <
Key; s. push (curr); curr = curr-> lchild;} else {curr = s. top (); s. pop (); curr = curr-> rchild;}/* while (curr! = NULL) {cout <
Key; s. push (curr); curr = curr-> lchild;} while (! S. empty () {curr = s. top (); s. pop (); tmp = curr-> rchild; while (tmp! = NULL) {cout <
Key; s. push (tmp); tmp = tmp-> lchild;} */} void InOrder (Tree T) // returns in the middle order traversal {if (T = NULL; TNode * curr = T; // TNode * tmp; stack
S; while (curr! = NULL) |! S. empty () {if (curr! = NULL) {s. push (curr); curr = curr-> lchild;} else {curr = s. top (); cout <
Key; s. pop (); curr = curr-> rchild ;}} void PostOrder (Tree T) // returns in reverse traversal {if (T = NULL; TNode * curr = T, * pre = NULL; stack
S; while (curr! = NULL |! S. empty () {if (curr! = NULL) {s. push (curr); curr = curr-> lchild;} else {curr = s. top (); s. pop (); if (curr-> rchild! = NULL & curr-> rchild! = Pre) {s. push (curr); curr = curr-> rchild;} else {cout <
Key; pre = curr; curr = NULL ;}}} Tree createTree (char * s, int n, int I) // build {if (I> = n) return NULL; TNode * curr; curr = (TNode *) malloc (sizeof (TNode); curr-> key = s [I]; curr-> lchild = createTree (s, n, 2 * (I + 1)-1); curr-> rchild = createTree (s, n, 2 * (I + 1); return curr ;} void freeTree (Tree T) // release {if (T! = NULL) {freeTree (T-> lchild); freeTree (T-> rchild); delete T ;}int main (void) {char s [] = "ABCDEFG "; tree T; T = createTree (s, 7, 0); InOrder (T); cout <