Leetcode 102 二叉树的层次遍历 C++

思路:广度优先搜索BFS.
用一个队列q,用来存储二叉树的节点。首先将根节点放进去,然后利用while循环来判断什么时候结束。然后利用for循环一层一层的输出。之所以可以这样做,是因为for循环中提前获取了q的大小,此时q的大小就是每一层节点的大小,然后逐步递减,虽然q的大小一直在变化,但在执行for循环的之前,q的大小就是下一层二叉树节点的大小。

class Solution {
public:
    vector> levelOrder(TreeNode* root) {
        if(!root) return {};
        vector > ans;
        queue q;
        q.push(root);
        while(!q.empty())
        {
            vector tmp;
            for(int i=q.size();i>0;--i)
            {
                TreeNode* t=q.front();q.pop();
                tmp.push_back(t->val);
                if(t->left) q.push(t->left);
                if(t->right) q.push(t->right);
            }
            ans.push_back(tmp);
        }
        return ans;
        
    }
};

你可能感兴趣的:(Leetcode 102 二叉树的层次遍历 C++)