For example:
Given binary tree
{1,#,2,3},
1
\
2
/
3
return [1,3,2].
Note: Recursive solution is trivial, could you do it iteratively?
Solution
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a list of integers
def inorderTraversal(self, root):
stack = []
node = root
solution = []
while node!= None or len(stack)>0:
if node != None:
stack.append(node)
node = node.left
else:
node = stack.pop()
solution.append(node.val)
node = node.right
return solution
Other solution:
This solution needs more space but is easier to understand.# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a list of integers
def inorderTraversal(self, root):
stack = []
if root != None:
stack.append(root)
solution = []
used = set()
while len(stack)>0:
node = stack.pop()
if node in used:
solution.append(node.val)
else:
used.add(node)
if node.right != None:
stack.append(node.right)
stack.append(node)
if node.left != None:
stack.append(node.left)
return solution
No comments :
Post a Comment