二叉树的层序遍历

举报
YIN_尹 发表于 2023/08/12 09:35:23 2023/08/12
【摘要】 二叉树的层序遍历二叉树的遍历,有4种方式,前面我们已经学习了3种方式:前中后序遍历。1. 思路讲解及举例现在我们再来学一下二叉树的层序遍历。那层序遍历的思想是什么呢,又该如何实现呢?我们一起来看一下:🆗,我们还来看这棵二叉树:层序遍历就是从第一层开始,一层一层的往下遍历,每一层从左到右进行遍历。对于这棵二叉树,它的层序遍历就是1 2 4 3 5 6思想很简单,那如何用代码实现呢?要实现层序...

二叉树的层序遍历

二叉树的遍历,有4种方式,前面我们已经学习了3种方式:前中后序遍历。

1. 思路讲解及举例

现在我们再来学一下二叉树的层序遍历。

那层序遍历的思想是什么呢,又该如何实现呢?

我们一起来看一下:

4b081c41abad407289d00fd715c4906c.png

🆗,我们还来看这棵二叉树:

层序遍历就是从第一层开始,一层一层的往下遍历,每一层从左到右进行遍历。

对于这棵二叉树,它的层序遍历就是1 2 4 3 5 6

4a8f75375e994eab8c64f0d5fdbc2792.png

思想很简单,那如何用代码实现呢?

要实现层序遍历,在这里我们借助队列来实现:

怎么做呢?

6c3d23f8045a40b18f3af5376324d345.png

我们先让根结点入队列,然后如果队列不为空,就出对头数据,并把对头数据的孩子结点带入队列,然后继续出对头数据,再将其孩子带入队列,依次循环往复,直到队列为空,就遍历完成了。

6b7ac115d2284a90a845a29637f7a7f7.png


最终出队列的顺序就是层序遍历的结果。

2. 代码实现

接下来我们就来实现一下层序遍历:

由于层序遍历需要借助队列实现,所以得先有队列这种数据结构,不过我们之前已经实现过了,直接拿来用就行。

将之前的代码直接添加到当前项目中:

8f2da74e186141a89c82778ad55621dd.png

队列有了,我们就来写代码:

当然记得把队列的数据类型修改一下,之前队列我们存的是整型,现在应该存二叉树的结点是吧,但是存结点拷贝比较大,所以存结点指针更好一点:

707c6bedefd143298372cce96e034255.png

//层序遍历
void LevelOrder(BTNode* root)
{
    Queue q;
    QueueInit(&q);
    if (root)
        QueuePush(&q, root);
    while (!QueueEmpty(&q))
    {
        BTNode* front = QueueFront(&q);
        printf("%d ", front->val);
        QueuePop(&q);
        if (front->left)
            QueuePush(&q, front->left);
        if (front->right)
            QueuePush(&q, front->right);
    }
    printf("\n");
    QueueDestroy(&q);
}

我们来测试一下:

be427b860e11492996bcf2491d49442f.png

是不是跟我们上面的结果一样啊,层序遍历就搞定了。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。