按层打印二叉树

本文介绍如何使用层序遍历算法,以递归方式实现将给定二叉树按照从上到下、从左到右的顺序逐层打印,提供了详细的代码示例和解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

 

例如:

给定二叉树: [3,9,20,null,null,15,7],

    3

   / \

  9 20

    / \

   15 7

 

返回其层次遍历结果:

[

  [3],

  [9,20],

  [15,7]

]

 

提示:

节点总数 <= 1000

 

解题思路:

层序遍历二叉树,循环把每层的结点全部存入数组,再把数组存入存储数组的数组。

 

算法流程:

1.创建存储数组的数组res

2.如果树为空,返回res(为空)

3.创建队列q,并且把树的根结点存入队

4.循环直到队列为空

               创建数组tmp

               遍历该层每个结点

                       创建结点node存储队头元素

                       把node的值存入数组

                       队头元素出队

                       如果node的左孩子存在

                               则入队

                       如果node的右孩子存在

                               则入队

              把数组tmp存入res

5.返回res

 

代码:

class Solution {

public:

    vector<vector<int>> levelOrder(TreeNode* root) {

    vector<vector<int>> res;

    if(root==nullptr) return res;

    queue<TreeNode*> q;

    q.push(root);

    while(!q.empty()) {

        vector<int> tmp;

        for(int i=q.size();i>0;i--) {

            TreeNode* node=q.front();

            tmp.push_back(node->val);

            q.pop();

            if(node->left!=nullptr)

                q.push(node->left);

            if(node->right!=nullptr)

                q.push(node->right);

        }

        res.push_back(tmp);

    }

    return res;

    }

};

 

运行步骤:

    3

   / \

  9 20

   / \

15  7

 

3入队

node=3,3出队,tmp:[3],9,20入队

res[[3]]

node=9,9出队,tmp:[9]

node=20,20出队,tmp:[9 20],15,7入队

res[[3] [9 20]]

node=15,15出队,tmp:[15]

node=7,7出队,tmp:[15 7]

res[[3] [9 20] [15 7]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值