二叉树的四种遍历函数

二叉树

二叉树结构定义如下

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};

四种遍历方式分别是 中序先序后序层序

具体例子如下:

二叉树图解:
在这里插入图片描述
四种遍历输出:

Inorder: D B E F A G H C I   //中序
Preorder: A B D F E C G H I   //先序
Postorder: D E F B H G I C A   //后序
Levelorder: A B C D F G I E H   //层序

先序,中序,后序

都是用递归输出,只是根,左节点,右节点的输出顺序不一样

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);
}

层序

需要定义两个数组存节点,一个存当前节点并输出data,另一个存这个节点下的左右节点。

void LevelorderTraversal( BinTree BT ){//层序
    if(!BT)
        return;
    int len=1,pos;
    BinTree a[101],b[101];
    a[0]=BT;
    while(1){
        if(len==0)
            return;
        pos=0;
        for(int i=0;i<len;i++)
        {
            if(a[i]!=NULL)//不为空输出
                printf(" %c",a[i]->Data);
            if(a[i]->Left!=NULL)//如果它的左节点不为空,就存到b数组里
                b[pos++]=a[i]->Left;
            if(a[i]->Right!=NULL)//如果它的右节点不为空,就存到b数组里
                b[pos++]=a[i]->Right;
        }
        len=pos;//更新下一层宽度,为下一次循环做准备
        for(int i=0;i<len;i++)//将下层的b赋给a,为下一次循环做准备
            a[i]=b[i];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值