102. Binary Tree Level Order Traversal - cocoder39/coco39_LC GitHub Wiki
102. Binary Tree Level Order Traversal
Notes 2020
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
queue = collections.deque()
if root:
queue.append(root)
res = []
while queue:
sz = len(queue)
level = []
for i in range(sz):
cur = queue.popleft()
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
res.append(level)
return res
===============================================================
both time complexity is O(n). space complexity of bfs is O(k) where k = max #node of a level, of dfs is O(h) where h is height of tree
bfs
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> q;
if (root) {
q.push(root);
}
while (! q.empty()) {
vector<int> level;
int sz = q.size();
for (int i = 0; i < sz; i++) {
TreeNode* node = q.front();
q.pop();
level.push_back(node->val);
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
res.push_back(level);
}
return res;
}
dfs
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
helper(res, root, 0);
return res;
}
private:
void helper(vector<vector<int>>& res, TreeNode* node, int level) {
if(! node) {
return;
}
if (res.size() == level) { // a start of a new level
res.push_back(vector<int>());
}
res[level].push_back(node->val);
helper(res, node->left, level + 1);
helper(res, node->right, level + 1);
}
};