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

【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在二叉树上的“变种”

你可能感兴趣的:(数据结构,算法)