1public List<Integer> preorderTraversal(TreeNode root) {
2 List<Integer> result = new ArrayList<>();
3 if (root == null) {
4 return result;
5 }
6
7 Stack<TreeNode> stack = new Stack<>();
8 stack.push(root);
9
10 while (!stack.isEmpty()) {
11 TreeNode current = stack.pop();
12 result.add(current.val);
13
14 // Push right first so left is processed first
15 if (current.right != null) {
16 stack.push(current.right);
17 }
18 if (current.left != null) {
19 stack.push(current.left);
20 }
21 }
22
23 return result;
24}