求二叉树的层序遍历(NC15/考察次数Top6/难度中等)

Posted 码农指南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求二叉树的层序遍历(NC15/考察次数Top6/难度中等)相关的知识,希望对你有一定的参考价值。

描述:
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
在这里插入图片描述
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]

示例1
输入:
{1,2}
返回值:
[[1],[2]]
示例2
输入:
{1,2,3,4,#,#,5}
返回值:
[[1],[2,3],[4,5]]
(题目来自牛客网)

用C++实现如下

/**
 * struct TreeNode {     
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */ //定义树的结构,int val,struct TreeNode *left,struct TreeNode *right

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int>> levelOrder(TreeNode* root) {
        //write code here
        //思路,二叉树的层序遍历,使用queue(先进先出的结构)来进行解决,每次记录下当前队列的大小
        vector<vector<int>> res;  //此处定义一个双层嵌套的vector,每一层遍历得到的值组成一个vector
                                  //,然后每一层的vector又push到一个双层嵌套的vector中返回结果
        if(root == nullptr)
            return res;
        queue<TreeNode*> que;                  //使用queue来实现,先进先出,则先左后右
        que.push(root);                        //把根部push进去
        while(que.size())                      //que不为空则表示还未遍历完,需要一直遍历下去
        {
            int nums = que.size();             //每次处理一层的所有元素
            vector<int> vec;
            while(nums--)                      //搞出一层的结果,得到一层的vector
            {
                TreeNode *node = que.front();  //取queue最前面的值
                que.pop();                     //弹出最前面的值     
                vec.push_back(node->val);      //将结果放入存储一层结果的vec容器中
                if(node->left)                 //queue为先进先出的结构,先放入左边,然后放入右边
                    que.push(node->left);
                if(node->right)
                    que.push(node->right);
            }
            if(vec.size() > 0)                 //遍历完一层有结果则放进res里面
                res.push_back(vec);
        }
        return res;                            //最后遍历完二叉树后,返回最终结果
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

以上是关于求二叉树的层序遍历(NC15/考察次数Top6/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章

牛客题霸 NC15 求二叉树的层序遍历

求二叉树的层序遍历

NC 15 二叉树的层序遍历

二叉树的之字形层序遍历(NC14/考察次数Top21/难度中等)

#yyds干货盘点# 面试必刷TOP101:求二叉树的层序遍历

算法20:求二叉树最宽的层有多少个节点(层序遍历续)