题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

#include <queue>
#include <vector>
class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        vector<vector<int> > it;
        if(root==nullptr)
        {
            return it;
        }
        // 广度优先搜索用队列存储中间对象,这里存储的是每一层的结点。使用队列是因为它先进先出的特性,每一次循环要把之前的结点删除掉,将下一层结点添加进去
        queue<TreeNode*> qu;
        TreeNode *node=root;
        qu.push(root);
        while (qu.empty()==false) {
            vector<int> temp;
            int _size = qu.size();
            // 这里选择qu.size层循环的原因是,每一次更新下一层的结点到列表中时,都需要删除原来列表中的元素,原来上一次的列表元素数量就是qu.size
            // 并且这个qu.size循环必须用一个整数在for循环外部定义。如果直接用qu.size的话,因为for循环内部有对queue的操作,所以for循环次数是不断地在动态变化的
            for (int i=0; i<_size; i++) {
                // 第一层循环里只有root一个结点,要是删除了下面就无法执行,所以必须有一个临时结点来保存每一层的第一个结点
                node=qu.front();
                // 先要把原来的结点删除,才能向vector里push
                qu.pop();
                temp.push_back(node->val);
                // 判空执行,养成好习惯!
                if(node->left!=nullptr)qu.push(node->left);
                if(node->right!=nullptr)qu.push(node->right);
            }
            it.push_back(temp);
            temp.clear();
        }
        return it;
    }
};

全部评论

相关推荐

11-17 23:00
南昌大学 Java
我要娶个什么名:10元一天 0元提成😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务