【PTA】6-9二叉树的遍历

【PTA】6-9二叉树的遍历

题目描述

要求分别实现二叉树的四种遍历
即前中后以及层序遍历
接口定义如下

void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );

解题思路

前中后序遍历倒是比较简单,本身二叉树就是递归地定义的,在哪个序就将输出语句放在哪个位置就可以了。
比较麻烦的是层次遍历
层次遍历实则对应的是图的搜索算法中的BFS,但由于二叉树的性质,如果还建立个队列、将邻节点依次入队又出队,未免显得太过于复杂
此处考虑引入数组,分别设置一个head值和tail值,用以存储迭代遍历时候的值。当head==tail,说明搜索完毕,停止输出

代码

void PreorderTraversal( BinTree BT )
{
    if (BT==NULL) 
        return;
    printf(" %c",BT->Data);
    PreorderTraversal(BT->Left);
    PreorderTraversal(BT->Right);
}
void InorderTraversal( BinTree BT )
{
    if (BT==NULL) 
        return;
    InorderTraversal(BT->Left);
    printf(" %c",BT->Data);
    InorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ){
    if (BT==NULL) 
        return;
    PostorderTraversal(BT->Left);
    PostorderTraversal(BT->Right);
    printf(" %c",BT->Data);
}
void LevelorderTraversal( BinTree BT ){
    if (BT==NULL) 
        return;
    BinTree binTree[100];
    int head=0,tail=0;//初始条件都是0
    binTree[tail++]=BT;//结束设为节点数
    while(head<tail){
        BinTree temp=binTree[head++];//逐层搜索
        printf(" %c", temp->Data);
        if(temp->Left) binTree[tail++]=temp->Left;
        if(temp->Right) binTree[tail++]=temp->Right;//从左往右搜索
    }
}

总结

前中后序较为常用且易于理解
层次遍历经常容易想到的是BFS,而采用辅助数组也是BFS在二叉树上的“变种”

发布了29 篇原创文章 · 获赞 18 · 访问量 3993

猜你喜欢

转载自blog.csdn.net/weixin_44522586/article/details/104662964