# 二叉树的层序遍历

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

 

示例:
二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层序遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

以下错误的选项是?

## aop ### before ```cpp #include using namespace std; 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) {} }; ``` ### after ```cpp ``` ## 答案 ```cpp class Solution { public: vector> levelOrder(TreeNode *root) { vector> res; queue q; if (root != NULL) { while (!q.empty()) { int size = q.size(); vector temp; for (int i = 0; i < size; i++) { TreeNode *t = q.front(); q.pop(); temp.push_back(t->val); if (t->left != NULL) q.push(t->left); if (t->right != NULL) q.push(t->right); } res.push_back(temp); temp.clear(); } } return res; } }; ``` ## 选项 ### A ```cpp class Solution { public: vector> levelOrder(TreeNode *root) { vector> ret; if (!root) return ret; queue q; q.push(root); while (!q.empty()) { int currNodeSize = q.size(); ret.push_back(vector()); for (int i = 1; i <= currNodeSize; i++) { TreeNode *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; } }; ``` ### B ```cpp class Solution { public: int depth(TreeNode *root) { if (root == NULL) return 0; return max(depth(root->left), depth(root->right)) + 1; } void levelOrder(vector> &ans, TreeNode *node, int level) { if (!node) return; ans[level].push_back(node->val); levelOrder(ans, node->left, level - 1); levelOrder(ans, node->right, level - 1); } vector> levelOrderBottom(TreeNode *root) { int d = depth(root); vector> ans(d, vector{}); levelOrder(ans, root, d - 1); return ans; } }; ``` ### C ```cpp class Solution { public: void dfs(TreeNode *root, vector> &res) { queue q; q.push(root); while (!q.empty()) { int sz = q.size(); vector tp; while (sz > 0) { TreeNode *p = q.front(); q.pop(); if (p->left != NULL) { q.push(p->left); } if (p->right != NULL) { q.push(p->right); } tp.push_back(p->val); sz--; } res.push_back(tp); } } vector> levelOrder(TreeNode *root) { vector> res; if (root == NULL) { return res; } dfs(root, res); return res; } }; ```