---
link: https://leetcode.com/problems/binary-tree-inorder-traversal/
tags: tree, bt
---
# 94. Binary Tree Inorder Traversal
## Question
Given a binary tree, return the *inorder* traversal of its nodes' values.
**Example:**
```
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,3,2]
```
**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 inorderTraversalRecursive(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
self.helper(node.left, result)
result.append(node.val)
self.helper(node.right, result)
def post_order_helper(self, node, result):
if node is None:
return
self.helper(node.left, result)
self.helper(node.right, result)
result.append(node.val)
def pre_order_helper(self, node, result):
if node is None:
return
result.append(node.val) # A
self.helper(node.left, result) # B
self.helper(node.right, result) # C
def inorderTraversal(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)]) # Pre order
stack.extend([(False, node.right), (True, node), (False, node.left)]) # In order
stack.extend([(True, node), (False, node.right), (False, node.left)]) # Post order
stacl.extend([C, B, A])
return result
"""
1
\
2
/
3
stack=[(False, 1)], result=[]
stack=[(False, 2), (True, 1), (False, None)], result=[]
stack=[(False, 2), (True, 1)], result=[]
stack=[(False, 2)], result=[1]
stack=[(False, None), (True, 2), (False, 3)], result=[1]
stack=[(False, None), (True, 2), (False, None), (True, 3), (False, None)], result=[1]
stack=[(False, None), (True, 2), (False, None), (True, 3)], result=[1]
stack=[(False, None), (True, 2), (False, None)], result=[1, 3]
stack=[(False, None), (True, 2)], result=[1, 3]
stack=[(False, None)], result=[1, 3, 2]
stack=[], result=[1, 3, 2]
"""
```
## Solution: Java
```java=
```