读书人

这个是什么思路啊遍历树的时候,该如何

发布时间: 2012-06-10 14:03:15 作者: rapoo

这个是什么思路啊,遍历树的时候

C/C++ code
这个非递归的算法前序遍历不好理解啊这是来自网上。不好理解void PostOrderUnrec(Bitree t){    SqStack s;    stacknode x;    StackInit(s);    p=t;        do     {        while (p!=null)        //遍历左子树        {            x.ptr = p;             x.tag = L;         //标记为左子树            push(s,x);            p=p->lchild;        }            while (!StackEmpty(s) && s.Elem[s.top].tag==R)          {            x = pop(s);            p = x.ptr;            visite(p->data);   //tag为R,表示右子树访问完毕,故访问根结点               }                if (!StackEmpty(s))        {            s.Elem[s.top].tag =R;     //遍历右子树            p=s.Elem[s.top].ptr->rchild;                }        }while (!StackEmpty(s));}//PostOrderUnrec 我的思路是:始终不要把跟节点存到栈中,取出根节点,则立即 把子右树,左子树压入,如果是叶子节点,则退出。statck<BitNood*> s;s.push_back(root);while(!s.empty()){BitNood* p=s.top();s.pop_back();if(p->right){s.push(p->right);}if(p->left){s.push(p->left);}}这是我提供的伪代码, 觉得没有问题,不知道如何理解 网上的那个思路


[解决办法]
PostOrderUnrec按名字貌似是后续遍历来的,你想的是前序遍历,两者出入栈的方式有差别...

读书人网 >C语言

热点推荐