给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例 1:

Input: root = [3,9,20,null,null,15,7]Output: [[3],[9,20],[15,7]]
示例 2:
Input: root = [1]Output: [[1]]
示例 3:
Input: root = []Output: []
提示:
- -1000 ≤
Node.val≤ 1000 - 树中的节点数在
[0,2000]范围内
思路
广度优先遍历的基础题。维护一个队列,按照以下步骤走:
- 把
root塞进队列; - 把
root弹出队列,并把和root相连的节点塞进队列;被弹出队列的节点,意味着我们已经访问它了; - 为了达到层次的感觉,我们还需要维护一个
walk_length变量。它的值是队列的长度,告诉我们要执行多少次pop()操作,它也暗示了当前层次有几个元素; - 当队列为空时,意味着所有的节点都访问过了,我们就退出返回答案
代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/class Solution {public:vector<vector<int>> levelOrder(TreeNode* root) {vector< vector<int> > ans;if( nullptr == root ) return ans;if( root->left == nullptr && root->right == nullptr ) {vector<int> tmp;tmp.emplace_back( root->val );ans.emplace_back( tmp );return ans;}queue<TreeNode*> Q;Q.push( root );while( !Q.empty() ) {int walk_length = Q.size();vector<int> layer;for(int i = 0; i < walk_length; i++) {TreeNode* cur = Q.front();Q.pop();layer.emplace_back( cur->val );if( cur->left != nullptr ) Q.push( cur->left );if( cur->right != nullptr ) Q.push( cur->right );}ans.emplace_back( layer );}return ans;}};
