所以我设法构造了string
方法,以便能够打印二进制树中的元素,但是问题是我希望它将整个二进制树打印为one字符串,而不是将元素分开。我的尝试是创建一个附加元素的列表,然后仅打印该列表。
[当我尝试这种方法时,问题是当从树中获取元素时,列表仅打印最新元素,即length =1。当我尝试全局创建列表时,一切都很好,但是我想避免使用全局变量。我将链接整个代码,但具体链接其需要修复的string
方法。链接的代码与全局列表l1
。
l1 = []
class BinaryTree:
def __init__(self):
"""Constructor for the binary tree."""
self._root = None
self._left = None
self._right = None
self._size = 0
self.l = []
def add(self, root):
"""Add a given element to the binary tree."""
if self._root:
if root < self._root:
if self._left is None:
self._left = BinaryTree()
self._left.add(root)
self._size += 1
elif root > self._root:
if self._right is None:
self._right = BinaryTree()
self._right.add(root)
self._size += 1
else:
self._root = root
self._size = 1
def string(self):
'''Prints the entire tree as a string.'''
#current = self._root
if self._left:
self._left.string()
#print(self._root)
l1.append(self._root)
if self._right:
self._right.string()
return l1
def len(self):
'''Returns the size of the tree (# of elements in the tree).'''
return self._size
def new():
"""Creates new instance."""
return BinaryTree()
def main():
test = new() # Test for new BT
test.add('c')
test.add('b')
test.add('a')
print(test.string())
assert test.len() == 3
if __name__ == '__main__': main()
不是使用全局变量来累积结果,而是可以从递归调用中return
节点并在调用方法中进行累积。
请参阅我定义的traverse
方法。它正在对树进行有序遍历。 string()
方法只是成为str()
返回的结果的traverse()
。
class BinaryTree:
def __init__(self):
"""Constructor for the binary tree."""
self._root = None
self._left = None
self._right = None
self._size = 0
self.l = []
def add(self, root):
"""Add a given element to the binary tree."""
if self._root:
if root < self._root:
if self._left is None:
self._left = BinaryTree()
self._left.add(root)
self._size += 1
elif root > self._root:
if self._right is None:
self._right = BinaryTree()
self._right.add(root)
self._size += 1
else:
self._root = root
self._size = 1
def traverse(self):
'''Prints the entire tree as a string.'''
to_print = []
if self._left:
to_print.extend(self._left.traverse())
to_print.append(self._root)
if self._right:
to_print.extend(self._right.traverse())
return to_print
def string(self):
return str(self.traverse())
def len(self):
'''Returns the size of the tree (# of elements in the tree).'''
return self._size
def new():
"""Creates new instance."""
return BinaryTree()
def main():
test = new() # Test for new BT
test.add('c')
test.add('b')
test.add('a')
print(test.traverse())
assert test.len() == 3
if __name__ == '__main__':
main()