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