【发布时间】:2016-02-11 21:05:47
【问题描述】:
我必须定义三个函数:preorder(t):、postorder(t): 和 inorder(t):。
每个函数都将二叉树作为输入并返回一个列表。然后应该以与在相应遍历中访问树元素相同的方式对列表进行排序(后序、前序或中序)
我已经为它们中的每一个编写了代码,但是当我调用另一个函数 (flat_list()) 时,我不断收到错误,我收到了一个由引发的索引错误
if not x or len(x) < 1 or n > len(x) or x[n] == None:
IndexError: list index out of range
我的遍历方法代码如下:
def postorder(t):
pass
if t != None:
postorder(t.get_left())
postorder(t.get_right())
print(t.get_data())
def pre_order(t):
if t != None:
print(t.get_data())
pre_order(t.get_left())
pre_order(t.get_right())
def in_order(t):
pass
if t != None:
in_order(t.get_left())
print(t.get_data())
in_order(t.get_right())
def flat_list2(x,n):
if not x or len(x) < 1 or n > len(x) or x[n] == None:
return None
bt = BinaryTree( x[n] )
bt.set_left( flat_list2(x, 2*n))
bt.set_right(flat_list2(x, 2*n + 1))
return bt
这就是我调用 flat_list2 的方式
flat_node_list = [None, 55, 24, 72, 8, 51, None, 78, None, None, 25]
bst = create_tree_from_flat_list2(flat_node_list,1)
pre_order_nodes = pre_order(bst)
in_order_nodes = in_order(bst)
post_order_nodes = post_order(bst)
print( pre_order_nodes)
print( in_order_nodes)
print( post_order_nodes)
【问题讨论】:
标签: python-3.x binary-tree inorder preorder postorder