---
link: https://leetcode.com/problems/binary-tree-preorder-traversal/
tags: tree, bt
---
# 144. Binary Tree Preorder Traversal
## Question
Given a binary tree, return the *preorder* traversal of its nodes' values.
**Example:**
```
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,2,3]
```
**Follow up:** Recursive solution is trivial, could you do it iteratively?
## Solution: Python
```python=
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversalRecursive(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
result = []
self.helper(root, result)
return result
def helper(self, node, result):
if node is None:
return
result.append(node.val)
self.helper(node.left, result)
self.helper(node.right, result)
def preorderTraversal(self, root):
from collections import deque
stack = deque()
stack.append((False, root)) # IsAppendingResult, Node
result = []
while stack:
is_appending_result, node = stack.pop()
if node is None:
continue
if is_appending_result:
result.append(node.val)
else:
stack.extend([(False, node.right), (False, node.left), (True, node)])
return result
```
## Solution: Java
```java=
```