69,336
社区成员
发帖
与我相关
我的任务
分享
这个非递归的算法前序遍历不好理解啊
这是来自网上。不好理解
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);
}
}
这是我提供的伪代码, 觉得没有问题,不知道如何理解 网上的那个思路
statck<BitNood*> s;
s.push_back(root);
while(!s.empty())
{
BitNood* p=s.top();
cout<<p->data;
s.pop();
if(p->right)
{
s.push(p->right);
}
if(p->left)
{
s.push(p->left);
}
}