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

liuzu2012 liuzu2012 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


这个非递归的算法前序遍历不好理解啊
这是来自网上。不好理解
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);
}
}


这是我提供的伪代码, 觉得没有问题,不知道如何理解 网上的那个思路
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
liuzu2012
C语言 70,039 成员 243,237 内容