Monday, August 9, 2010

iterative algorithm for pre-order traversal

This is done by an algormthm called Morris traversal.

void MorrisTraversal(struct Node *root)
{ struct Node *p,*pre;

if(root==0) { return; }

for(p=root;p!=0;)
{
if(p->Left==0) { printf(" %d ",p->Data); p=p->Right; continue; }

for(pre=p->Left;pre->Right!=0 && pre->Right!=p;pre=pre->Right) { }

if(pre->Right==0)
{ pre->Right=p; p=p->Left; continue; }
else
{ pre->Right=0; printf(" %d ",p->Data); p=p->Right; continue; }


}
}

}

No comments:

Post a Comment