二叉树前序和后序非递归遍历

我承认我是菜鸟,这个前序看了很久才搞明白,悲剧!

 

//中序非递归遍历
void inorder(node *b)
{
stack<node *> Stack;
node *p = b;
while(p || !Stack.empty())
{
while(p)
{
Stack.push(p);
p = p->lchild;
}
if(!Stack.empty())
{
p = Stack.top();
cout << p->data << " ";
Stack.pop();
p = p->rchild;
}
}
}
//后序非递归遍历
void postorder(node *b)
{
    stack<node *> Stack;
    node *p = b;
    while(p || !Stack.empty())
    {
        while(p)
        {
            Stack.push(p);
            p = p->rchild;
        }
        if(!Stack.empty())
        {
            p = Stack.top();
            cout << p->data << " ";
            Stack.pop();
            p = p->lchild;
        }
    }
}

 

posted @ 2010-11-25 21:52  hailong  阅读(143)  评论(0编辑  收藏  举报