代码随想录 day15| 层序遍历

102.二叉树的层序遍历

102.二叉树的层序遍历

解题思路:
层序遍历一个二叉树,就是从左到右一层层去遍历二叉树,和之前的都不一样。 需要借用一个辅助数据结构即队列实现,队列先进后出,符合一层层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。
然而 这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。

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

        queue <TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            int currentLevelSize = q.size();
            ret.push_back(vector <int> ());
            for (int i = 1; i <= currentLevelSize; ++i) {
                auto node = q.front(); q.pop();
                ret.back().push_back(node->val);
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
        }
        
        return ret;
    }
};