大家好——我是一个编程新手,这里有以下非常简单的代码:
def postorder(T):
if T != None:
postorder(T.left)
postorder(T.right)
print T.data,
我想要的不是打印遍历,而是让函数将该信息存储在数组或类似的东西中,这样我就可以将该信息用于其他事情
大家好——我是一个编程新手,这里有以下非常简单的代码:
def postorder(T):
if T != None:
postorder(T.left)
postorder(T.right)
print T.data,
我想要的不是打印遍历,而是让函数将该信息存储在数组或类似的东西中,这样我就可以将该信息用于其他事情
你可以做:
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
内部函数recurse
负责遍历树并将数据自动添加到data
.
你可以传入一个可调用对象,或者你可以编写一个生成器:
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
或者,单线解决方案:
def postorder_one(T):
return [] if T is None else postorder_one(T.left)+[T.data]+postorder_one(T.right)