Вы можете упростить свой метод string
, включив итерацию в свой класс. Если используется такая методика, вычисление размера структуры может также использовать функцию, как показано в методе __len__
, показанном ниже:
#! /usr/bin/env python3
def main():
test = Node()
test.add('c')
test.add('b')
test.add('a')
print(test)
assert len(test) == 3
class Node:
def __init__(self):
"""Initializes a single node to be used in a Binary Tree."""
self.__data = None
self.__left = None
self.__right = None
def add(self, data):
"""Incorporates a data value into the Binary Tree structure."""
if self.__data is None:
self.__data = data
elif data < self.__data:
if self.__left is None:
self.__left = type(self)()
self.__left.add(data)
elif data > self.__data:
if self.__right is None:
self.__right = type(self)()
self.__right.add(data)
def __str__(self):
"""Converts a Binary Tree into a string suitable for printing."""
return ''.join(map(str, self))
def __iter__(self):
"""Iterates over all values in the underlying tree structure."""
if self.__data is not None:
if self.__left is not None:
yield from self.__left
yield self.__data
if self.__right is not None:
yield from self.__right
def __len__(self):
"""Counts how many data values are stored in the underlying tree."""
return sum(1 for _ in self)
if __name__ == '__main__':
main()
Для более интересного теста двоичного дерева вы может прочитать каждый символ из исходного файла и добавить его в структуру. Три кода могут быть добавлены в код для выполнения sh this:
import sys
- A
main
, модифицированная для получения символов из файла. - Метод
update
, который может помочь с обработкой итерируемых объектов.
import sys
def main():
test = Node()
with open(sys.argv[0]) as file:
test.update(character for line in file for character in line)
print(test)
print('There are', len(test), 'unique characters in this file.')
class Node:
def update(self, iterable):
"""Takes all items from an iterable and adds them to the tree."""
for item in iterable:
self.add(item)
Убедитесь, что вы добавили метод update
в класс Node
. То, что показано выше, является неполным, но показывает код, который необходимо добавить, чтобы дать бинарному дереву дополнительную функциональность.