【每日算法 && 数据结构(C++)】—— 09 | 二叉树的层序遍历(解题思路、流程图、代码片段)


在这里插入图片描述

Opportunities are always reserved for those who are prepared.

机会总是留给那些有准备的人

01 | 👑 题目描述

给你一棵二叉树,请你实现二叉树的层序遍历程序

什么是二叉树?
二叉树是一种常见的树形数据结构,它由一组称为节点的元素组成。每个节点最多有两个子节点,分别称为左子节点和右子节点。这两个子节点可以为空,也可以包含其他节点作为其子节点,形成了二叉树的层次结构。

02 | 🔋 解题思路

什么是层序遍历?
层序遍历(Level Order Traversal)是一种针对二叉树的遍历方式。它按照树的层次顺序,从上到下、从左到右逐层访问二叉树的节点。具体过程如下:

  1. 从根节点开始,将根节点放入队列中。
  2. 当队列不为空时,重复执行以下步骤:
    • 弹出队首节点,并访问该节点。
    • 如果弹出的节点有左子节点,则将左子节点放入队列中。
    • 如果弹出的节点有右子节点,则将右子节点放入队列中。
  3. 当队列为空时,遍历结束。

层序遍历确保了树的每个层级都按顺序进行访问,从而按层级打印或处理二叉树的节点。

以下是一个示例二叉树及其层序遍历的过程:

        1
       / \
      2   3
     / \ 
    4   5

层序遍历的结果:1 -> 2 -> 3 -> 4 -> 5

时间 && 空间复杂度

  • 时间复杂度** O(n),其中 n 是二叉树的节点数**
    最坏情况下,即二叉树为满二叉树时,层序遍历需要遍历整个二叉树的所有节点
  • 空间复杂度O(n)
    在层序遍历中,需要使用一个队列来暂存待访问的节点,队列中的元素数量最多不会超过某一层的节点数。对于最坏情况下的满二叉树,某一层的节点数最多为 2^(h-1),其中 h 是树的高度。因此,空间复杂度为 O(2^h)。在最坏情况下,当树为满二叉树时,空间复杂度为 O(2^(h-1)),即 O(2^(log₂n-1))。简化后的空间复杂度仍为 O(n)

03 | 🧢 代码片段

#include <iostream>
#include <queue>

struct Node {
    int data;
    Node* left;
    Node* right;

    Node(int value) : data(value), left(nullptr), right(nullptr) {}
};

void levelOrderTraversal(Node* root) {
    if (root == nullptr)
        return;

    std::queue<Node*> q;
    q.push(root);

    while (!q.empty()) {
        Node* current = q.front();
        q.pop();

        std::cout << current->data << " ";

        if (current->left != nullptr)
            q.push(current->left);
        if (current->right != nullptr)
            q.push(current->right);
    }
}

int main() {
    // 构建示例二叉树
    Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->left->right = new Node(5);

    std::cout << "层序遍历结果:";
    levelOrderTraversal(root);
    std::cout << std::endl;

    return 0;
}

在这里插入图片描述

在这里插入图片描述

各位大佬点点关注,点赞,收藏,有空的时候再回来看看,谢谢
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ltd Pikashu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值