Dare2Solve
This problem involves traversing a binary tree in level order, which means visiting nodes level by level from left to right.
To solve this problem, we can use a queue-based approach. Starting from the root node, we will enqueue each node and process them level by level. We will maintain a list of lists where each inner list represents nodes at a particular level.
O(N), where N is the number of nodes in the binary tree. Each node is processed exactly once.
O(N) in the worst case. This occurs when the tree is completely unbalanced, and the queue contains all nodes at the last level.
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
if (root == nullptr) return result;
queue<TreeNode*> queue;
queue.push(root);
while (!queue.empty()) {
int levelSize = queue.size();
vector<int> currentLevel;
for (int i = 0; i < levelSize; i++) {
TreeNode* currentNode = queue.front();
queue.pop();
currentLevel.push_back(currentNode->val);
if (currentNode->left != nullptr) queue.push(currentNode->left);
if (currentNode->right != nullptr) queue.push(currentNode->right);
}
result.push_back(currentLevel);
}
return result;
}
};
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
result = []
queue = deque([root])
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft()
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(current_level)
return result
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) return result;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int levelSize = queue.size();
List<Integer> currentLevel = new ArrayList<>();
for (int i = 0; i < levelSize; i++) {
TreeNode currentNode = queue.poll();
currentLevel.add(currentNode.val);
if (currentNode.left != null) queue.add(currentNode.left);
if (currentNode.right != null) queue.add(currentNode.right);
}
result.add(currentLevel);
}
return result;
}
}
var levelOrder = function(root) {
let result = [];
if (root === null) return result;
let queue = [root];
while (queue.length > 0) {
let levelSize = queue.length;
let currentLevel = [];
for (let i = 0; i < levelSize; i++) {
let currentNode = queue.shift();
currentLevel.push(currentNode.val);
if (currentNode.left !== null) queue.push(currentNode.left);
if (currentNode.right !== null) queue.push(currentNode.right);
}
result.push(currentLevel);
}
return result;
};