#include 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 { private: void levelOrder(std::vector> &levels, TreeNode *root, int index) { if (root == nullptr) { return; } else if (levels.size() == index) { levels.push_back(std::vector{}); } levels[index].push_back(root->val); levelOrder(levels, root->left, index + 1); levelOrder(levels, root->right, index + 1); } public: std::vector> levelOrder(TreeNode *root) { std::vector> levels; levelOrder(levels, root, 0); return levels; } };