> For the complete documentation index, see [llms.txt](https://emmaguo100.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://emmaguo100.gitbook.io/leetcode/01-03-2022-144.md).

# 01/03/2022 144

144\. Binary Tree Preorder Traversal

&#x20;\*/ class Solution {&#x20;

//traverse recursion&#x20;

```
 public List preorderTraversal(TreeNode root) { 
  ArrayList result = new ArrayList<>(); 
  traverse(root, result); 
  return result;
}
 
 public void traverse(TreeNode root, ArrayList<Integer> list){
    if (root == null){
       return;
    }
        
     list.add(root.val);
     traverse(root.left, list);
     traverse(root.right, list);
    }
}
 

```

} }

// non-recursion / interation way

```
   class Solution { //traverse recursion 
   public List preorderTraversal(TreeNode root) { 
   Stack<TreeNode> stack = new Stack<>(); 
   ArrayList<Integer> preorder = new ArrayList<>();
    
      if (root == null){
        return preorder;
    }
    
    stack.push(root);
    
    while(!stack.isEmpty()){
        TreeNode root = stack.pop();
        preorder.add(root.val);
        
        if(root.right != null){ //push right first because FILO
            stack.push(root.right);
        }
               
        if(root.left != null){
            stack.push(root.left);
        }
        
    }
    
   return preorder;
   }
}
```
