【算法王道】二叉树的遍历

来源:互联网 发布:网络对生活的利与弊 编辑:程序博客网 时间:2024/06/01 19:03
前序遍历
void preOrder(Bitree bt)
{
    int top = 0; BiTree s[];
    while(bt != null || top > 0)
    {
        while(bt != null)
        {
            cout << bt->data;

            if(bt->rchild) s[++top] = bt->rchild;
            bt = bt->lchild;
        }

        if(top > 0)
            bt = s[top--];
    }
}

中序遍历
void inOrder(BiTree bt)
{
    BiTree s[], p =bt;
    int top = 0;

    while(p || top > 0)
    {
        while(p)
        {
            s[++top] = p;
            p = p->lchild;
        }
        if(top > 0)
        {
            p = s[top--];
            cout << p->data;
            p = p->rchild;
        }
    }
}
后序遍历
void postOrder(BiTree t)
{
    BiTree q = bt, s[];
    int top = 0,tag[];

    while(q != null && top > 0)
    {
        while(q != null)
        {
            s[++top] = q;
            tag[top] = 0;
            q = q->lchild;
        }

        while(top > 0 && tag[top] == 1)
             { cout << a[top].->data; top--; }

        if(top>0)
        {
            q = s[top];
            q = q->rchild;
            tag[top] = 1;
        }
    }
}
层次遍历
void levelOrder(BiTree bt)
{
    BiTree p = bt, Q[];
    int front = 0, rear = 1;
    Q[0] = p;

    while(front <= rear)
    {
        p = Q[front++];
        cout << p->data;
       
        if(p->lchild)
            Q[rear++] = p->lchild;
        if(p->rchild)
            Q[rear++] = p->rchild;
    }
}

原创粉丝点击