Hi,
    Need more details about explored(  Node * ) function,

    Consider the "NULL" input

    if your explored( NULL ) returns "true" then I guess that every thing
works fine, and also most of your checks could be eliminated ( code will
become simpler )
    if your explored( NULL ) returns "false", then the same case as in my
previous mail will result in wrong answer.
*        if((s->left == null && s->right==null)
||(explored(s->left)&&explored(s->right)) *
*        ---as s->left == null && explored( s->right )   ( and vice versa
are not there )*

Correct me if I'm wrong.

Thanks and Regards,
K.V.Chandra Kumar.


On 28/08/07, MD <[EMAIL PROTECTED]> wrote:
>
>
> I think first s=pop() in while is not the right approach. This is an
> alternate approach where explored() checks if the node is visited or
> not... hence discarding that path.. and I think the following handles
> the null conditions as well.. (ex given by chandra)
>
> void postOrderTraversal(Tree *root)
> {
> node * previous = null;
> node * s = root;
> push(s);
>
> while( stack is not empty)
> {
> if(s->left && !explored(s->left))  //explored check if the node was
> previously visited
>    {push(s->left);
>    s=s->left}
> else
>   {if(s->right && !explored(s->right))
>       {push(s->right);
>        s=s->right;}
>   }
>
>   if((s->left == null && s->right==null) ||(explored(s-
> >left)&&explored(s->right)) //last level-child or both childern are
> explored
>   { s = pop(); //
>     print(s->data);
>     s= pop(); //POP Again....point s to next element.
>   }
> }//end of while
>
> }
>
> On Aug 24, 6:17 am, "Phani Kumar Ch. V." <[EMAIL PROTECTED]> wrote:
> > Hi all,
> >
> > Please let me know if this pseudo code gives correct solution for
> iterative
> > post-order traversal of a binary tree.
> > ----------------------------------------------------
> > void postOrderTraversal(Tree *root)
> > {
> > node * previous = null;
> > node * s = null;
> > push(root);
> > while( stack is not empty )
> > {
> >   s = pop();
> >
> >   if(s->right == null and s->left == null)
> >   {
> >     previous = s;
> >     process node s;
> >   }
> >   else
> >   {
> >     if( s->right == previous or s->left == previous )
> >     {
> >       previous = s;
> >       process node s;
> >     }
> >     else
> >     {
> >       push( s );
> >       if(s->right) { push(s->right); }
> >       if(s->left)  { push(s->left);  }
> >     }
> >   }}
> >
> > -----------------------
> > Regards
> > Phani
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/algogeeks
-~----------~----~----~----~------~----~------~--~---

Reply via email to