Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
Given binary tree
{1,#,2,3}, 1
\
2
/
3
return
[3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
Solution:
Recursive:
# 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 postorderTraversal(self, root):
solution = []
self.postorderTraversalRec(root, solution)
return solution
def postorderTraversalRec(self, root, solution):
if root == None:
return
self.postorderTraversalRec(root.left, solution)
self.postorderTraversalRec(root.right, solution)
solution.append(root.val)
Iterative:
# 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 postorderTraversal(self, root):
solution = []
used = set()
stack = []
if root != None:
stack.append(root)
while len(stack)>0:
node = stack.pop()
if node in used:
solution.append(node.val)
else:
used.add(node)
stack.append(node)
if node.right != None:
stack.append(node.right)
if node.left != None:
stack.append(node.left)
return solution
No comments :
Post a Comment