Recursive Postorder Traversal to List in Python?
10,053
Solution 1
You can do:
def postorder(tree):
data = []
def recurse(node)
if not node:
return
recurse(node.left)
recurse(node.right)
data.append(node.data)
recurse(tree)
return data
The inner function recurse
takes care of traversing over the tree and the data is automatically added to data
.
Solution 2
You could pass in a callable object, or you could write a generator:
def postorder(T):
if T != None:
postorder(T.left)
postorder(T.right)
print T.data,
def postorder_func(T, f):
if T != None:
postorder_func(T.left, f)
postorder_func(T.right, f)
f(T.data)
def postorder_gen(T):
if T != None:
for i in postorder_gen(T.left):
yield i
for i in postorder_gen(T.right):
yield i
yield T.data
class T:
def __init__(self, left = None, data = None, right = None):
self.left = left
self.data = data
self.right = right
one_half = T(data=.5)
three_halves = T(data=1.5)
one = T(one_half, 1, three_halves)
three = T(data=3)
root = T(one, 2, three)
postorder(root)
print ""
a = []
postorder_func(root, a.append)
print a
a = list(postorder_gen(root))
print a
Or, a one-liner solution:
def postorder_one(T):
return [] if T is None else postorder_one(T.left)+[T.data]+postorder_one(T.right)
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Author by
Admin
Updated on June 16, 2022Comments
-
Admin about 2 years
Hello all—I'm a programming newcomer, and have the following very simple code here:
def postorder(T): if T != None: postorder(T.left) postorder(T.right) print T.data,
All I want is instead of printing the traversal I want to have the function store that information in an array or something of the like such that I can then use that information for other things
-
Simeon Visser over 10 yearsAnd Python 3.3+:
yield from postorder_gen(T.left)
.