自我修炼_初级算法篇_leetcode_第29题

二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

自我修炼_初级算法篇_leetcode_第29题_第1张图片
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:

输入:root = [1]
输出:[[1]]
示例 3:

输入:root = []
输出:[]
 

提示:

树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
相关标签

广度优先搜索
二叉树

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnldjj/
这个题还是比较考验代码功底的需要对STL库比较熟悉.

层次遍历就好了。一层的在一起。先进先出的原则。所以这就要借用到我们的队列。queue容器。我们需要把一层的从左到右放到容器内。且是一个二维的int型的vector容器。

首先是判断是否是空的如果是空的直接返回空的vector容器。


class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        vector > vec;
        if (!root) {
            return vec;
        }
}

再下来,首先要有一个queue容器,获取每一层的元素。因为先进先出的原则所以我们先进左子树再进右子树,这样我们将queue容器的值在返回给vector容器就不用更改顺序。

 queue  q;
        q.push(root);//首先将根节点压入队列中
        while (!q.empty()) {//进入循环
            int lens = q.size();//确认循环次数
            vec.push_back(vector  ());//建立二维vector容器
            for (int i = 1; i <= lens; ++i) {
                auto node = q.front(); //这是c++11的新增写法。auto就是自动辨别类型。这里其实就是TreeNode*类型。
                q.pop();将队列首元素删除。
                vec.back().push_back(node->val);//将val值赋予vec容器
                //一下两行判断是否有子树。
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
        }

你可能感兴趣的:(Leetcode,算法,leetcode,职场和发展)