# [102. 二叉树的层次遍历](https://leetcode-cn.com/problems/binary-tree-level-order-traversal) [English Version](/solution/0100-0199/0102.Binary%20Tree%20Level%20Order%20Traversal/README_EN.md) ## 题目描述 <!-- 这里写题目描述 --> <p>给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。</p> <p>例如:<br> 给定二叉树: <code>[3,9,20,null,null,15,7]</code>,</p> <pre> 3 / \ 9 20 / \ 15 7 </pre> <p>返回其层次遍历结果:</p> <pre>[ [3], [9,20], [15,7] ] </pre> ## 解法 <!-- 这里可写通用的实现逻辑 --> 队列实现。 <!-- tabs:start --> ### **Python3** <!-- 这里可写当前语言的特殊实现逻辑 --> ```python # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if root is None: return [] res = [] q = [] q.append(root) while q: size = len(q) t = [] for _ in range(size): node = q.pop(0) if node.left is not None: q.append(node.left) if node.right is not None: q.append(node.right) t.append(node.val) res.append(t) return res ``` ### **Java** <!-- 这里可写当前语言的特殊实现逻辑 --> ```java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if (root == null) return Collections.emptyList(); Deque<TreeNode> q = new ArrayDeque<>(); q.offer(root); List<List<Integer>> res = new ArrayList<>(); while (!q.isEmpty()) { int size = q.size(); List<Integer> t = new ArrayList<>(); while (size-- > 0) { TreeNode node = q.poll(); t.add(node.val); if (node.left != null) q.offer(node.left); if (node.right != null) q.offer(node.right); } res.add(t); } return res; } } ``` ### **C++** ```cpp /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { if (!root) return {}; vector<vector<int>> res; queue<TreeNode*> q{{root}}; while (!q.empty()) { vector<int> oneLevel; for (int i = q.size(); i > 0; --i) { TreeNode* t = q.front(); q.pop(); oneLevel.push_back(t->val); if (t->left) q.push(t->left); if (t->right) q.push(t->right); } res.push_back(oneLevel); } return res; } }; ``` ### **...** ``` ``` <!-- tabs:end -->