直接上代码

非递归


void InorderTraversal(BinTree BT)
{
    Stack S = CreateStack();
    BinTree p = BT;
    while (p != NULL || !IsEmpty(S))
    {
        if(p!=NULL)
        {
            Push(S, p);
            p = p->Left;
        }
        else 
        {
            p = Pop(S);
            printf(" %c", p->Data);
            p = p->Right;
        }
    }
}
void PreorderTraversal(BinTree BT)
{
    Stack S = CreateStack();
    BinTree p = BT;
    while (p != NULL || !IsEmpty(S))
    {
        if(p!=NULL)
        {
            Push(S, p);
            printf(" %c", p->Data);
            p = p->Left;
        }
        else 
        {
            p = Pop(S);
            p = p->Right;
        }
    }
}
void PostorderTraversal(BinTree BT)
{
    Stack S = CreateStack();
    BinTree p = BT;
    while (p != NULL || !IsEmpty(S))
    {
        if(p!=NULL)
        {
            //第一次进 标记为1
            p->flag = 1;
            Push(S, p);
            p = p->Left;
        }
        else 
        {
            p = Pop(S);
            int f = p->flag;

            if (f == 1)
            {
                p->flag = 2;
                Push(S, p);
                p = p->Right;
            }
            else
            {
                printf(" %c", p->Data);
                p = NULL;
            }
        }
    }
}

递归也能过

void InorderTraversal(BinTree BT)
{
    if (!BT)
        return;
    InorderTraversal(BT->Left);
    printf(" %c", BT->Data);
    InorderTraversal(BT->Right);
}
void PreorderTraversal(BinTree BT)
{
    if (!BT)
        return;
    printf(" %c", BT->Data);
    PreorderTraversal(BT->Left);
    PreorderTraversal(BT->Right);
}
void PostorderTraversal(BinTree BT)
{
    if(!BT)
    return ;
    PostorderTraversal(BT->Left);
    PostorderTraversal(BT->Right);
    printf(" %c",BT->Data);
}
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐