bfs O(n) time O(n) space
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; queue<TreeNode *> q; q.push(root); while (!q.empty()) { res.push_back({}); for (int i = size(q); i > 0; --i) { auto p = q.front(); q.pop(); if (!p) continue; res.back().push_back(p->val); q.push(p->left); q.push(p->right); } } if (res.back().empty()) { res.pop_back(); } return res; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if (!root) return res; queue<pair<TreeNode *, int>> q; q.emplace(root, 0); while (!q.empty()) { auto p = q.front(); q.pop(); if (p.first) { if (p.second < res.size()) res[p.second].push_back(p.first->val); else res.push_back({p.first->val}); q.emplace(p.first->left, p.second + 1); q.emplace(p.first->right, p.second + 1); } } return res; } };
|
preorder traversal O(n) time O(1) extra space
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; preorder(root, res, 0); return res; }
void preorder(TreeNode *root, vector<vector<int>> &res, int lvl) { if (!root) return; if (res.size() == lvl) { res.resize(lvl + 1); } res[lvl].push_back(root->val); preorder(root->left, res, lvl + 1); preorder(root->right, res, lvl + 1); } };
|