我想定义两个函数,一个用于从嵌套列表中打印出一个树,另一个用于从平面列表中打印一个树。
如果我们有列表,那么就可以了
[5, [10, None, None], [11, [2, None, None],[6, None, None]]],
和[None, 5, 10, 11, None, None, 2, 6]
,我们会生成一个看起来像
10
5
15
11
22
这是二叉树实现
class BinaryTree:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def get_left(self):
return self.left
def get_right(self):
return self.right
def set_left(self, tree):
self.left = tree
def set_right(self, tree):
self.right = tree
def set_data(self, data):
self.data = data
def get_data(self):
return self.data
def create_string(self, spaces):
info = ' ' * spaces + str(self.data)
if self.left != None:
info += self.left.create_string(spaces+4)
if not self.right == None:
info += self.right.create_string(spaces+4)
return info
def __str__(self):
representation = self.create_string(0)
return representation
我基本上想将列表转换为树,因为二进制树类中有一个创建字符串函数
答案 0 :(得分:0)
一个简单的递归函数允许您将嵌套列表创建为btree:
def create_tree(data):
if not data:
return data
d, l, r = data
btree = BinaryTree(d)
btree.set_left(create_tree(l))
btree.set_right(create_tree(r))
return btree
>>> print(create_tree([10, [5, None, None], [15, [11, None, None],[22, None, None]]]))
10
(l) 5
(r) 15
(l) 11
(r) 22
虽然我个人会更新__init__()
类的BinaryTree
方法,可选择左右:
class BinaryTree(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
然后递归函数变为:
def create_tree(data):
if not data:
return data
d, l, r = data
return BinaryTree(d, create_tree(l), create_tree(r))
目前还不清楚从平面列表到树结构的映射。