数据结构与算法题目集(中文)6-9 二叉树的遍历 (25分)

烂漫一生 提交于 2020-02-03 01:04:39

1.题目链接

https://pintia.cn/problem-sets/15/problems/732

2.题目分析

1.void InorderTraversal( BinTree BT );中序遍历,即“根,左,右” 先输出根节点,再递归进入左节点,之后再递归进入右节点

2.void PreorderTraversal( BinTree BT ); 先序遍历,即“左,跟,右”先递归进入左节点,之后返回一层输出根节点,再递归进入右节点

3.void PostorderTraversal( BinTree BT );后序遍历,即“左,右,跟”先不断递归进入左节点,再分别递归入右节点,之后输出根节点

4.void LevelorderTraversal( BinTree BT );层序遍历,即一层一层从上往下从左往右输出节点

层序遍历具体的实现方法:

声明一个binTree[100]数组,使用head、last两个指针;

首先将根节点输出,并将last指针++,接着将根节点的左、右节点放到数组中进行缓存,同时使last指针++;

下一次再将左节点输出,同时将左节点的左、右节点存入数组,last++,右节点同理;

最后当head与last值相等的时候,表示到达最右下方节点,输出结束。

3.代码

void InorderTraversal( BinTree BT )
{
   if(BT==NULL)
   return;//注意要处理子树为空的情况,如果不加处理,访问不存在的节点的左、右子树会报错
   InorderTraversal(BT->Left);
   printf(" %c",BT->Data);
   InorderTraversal(BT->Right);

}
void PreorderTraversal( BinTree BT )
{
      if(BT==NULL)
   return;
     printf(" %c",BT->Data);
   PreorderTraversal(BT->Left);
   PreorderTraversal(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, last = 0; //
    binTree[last++] = BT;
 
    while (head < last)     //通过迭代存储和遍历节点
    {
        BinTree temp = binTree[head++];
        printf(" %c", temp->Data);
 
        if (temp->Left)     //左子树存在
            binTree[last++] = temp->Left;
        if (temp->Right)    //右子树存在
            binTree[last++] = temp->Right;
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!