Я разобрался с ответом. Спасибо Данбен за руководство в получении там! Это была комбинация того, что он говорил и смотрел на некоторые другие реализации самостоятельно. Вот то, что я придумал, если кому-то интересно.
class Node():
def __init__(self,data, left=None, right=None):
self.data = data
self.left = left
self.right = right
class BSTree():
def __init__(self):
self.root = None
def __add(self,node,data):
if self.root is None:
self.root = Node(data)
if node is None:
return Node(data)
else:
if data < node.data:
node.left = self.__add(node.left,data)
elif data > node.data:
node.right = self.__add(node.right,data)
return node
def add(self,data):
self.__add(self.root,data)
def __preorder(self,node):
if node is not None:
print node.data
self.__preorder(node.left)
self.__preorder(node.right)
def preorder(self):
self.__preorder(self.root)
def __inorder(self,node):
if node is not None:
self.__inorder(node.left)
self.__inorder(node.right)
print node.data
def inorder(self):
self.__inorder(self.root)
def __postorder(self,node):
if node is not None:
self.__postorder(node.left)
print node.data
self.__postorder(node.right)
def postorder(self):
self.__postorder(self.root)
def pprint(self,Node,indent):
if Node is not None:
self.pprint(Node.right, indent+1)
print indent*" ",Node.data
self.pprint(Node.left, indent+1)
def leafcount(self,Node):
if Node is None:
return 0
if self.atLeaf(Node):
return 1
else:
return self.leafcount(Node.left)+self.leafcount(Node.right)
if __name__=="__main__":
y = BSTree()
for pres\
in ["OBAMA","BUSHW","CLINTON","BUSHG","REGAN","CARTER","FORD","NIXON","JOHNSON"]:
y.add(pres)
y.pprint(y.root,0)