// Iterative public List<Integer> inorderTraversalIterative(TreeNode root) { List<Integer> result = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); TreeNode current = root; while (current != null || !stack.isEmpty()) {
// Go to leftmost node while (current != null) { stack.push(current); current = current.left; }
// Process current node current = stack.pop(); result.add(current.val);
// Move to right subtree current = current.right; } return result; }
// Iterative public List<Integer> preorderTraversalIterative(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) return result; Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode current = stack.pop(); result.add(current.val);
// Push right first (so left is processed first) if (current.right != null) stack.push(current.right); if (current.left != null) stack.push(current.left); } return result; }
// Iterative (using two stacks) public List<Integer> postorderTraversalIterative(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) return result; Stack<TreeNode> stack1 = new Stack<>(); Stack<TreeNode> stack2 = new Stack<>(); stack1.push(root); while (!stack1.isEmpty()) { TreeNode current = stack1.pop(); stack2.push(current); if (current.left != null) stack1.push(current.left); if (current.right != null) stack1.push(current.right); } while (!stack2.isEmpty()) { result.add(stack2.pop().val); } return result; }
2. Breadth-First Search (BFS) / Level Order Traversal
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (root == null) return result;
Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int levelSize = queue.size(); List<Integer> currentLevel = new ArrayList<>(); for (int i = 0; i < levelSize; i++) { TreeNode current = queue.poll(); currentLevel.add(current.val); if (current.left != null) queue.offer(current.left); if (current.right != null) queue.offer(current.right); } result.add(currentLevel); } return result; }