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,data):
if self.root is None:
self.root = Node(data)
self.reset()
else:
while self.curNode is not None:
if data < self.curNode.data:
self.curNode = self.curNode.left
elif data > self.curNode.data:
self.curNode = self.curNode.right
self.curNode=Node(data)
self.reset()
def pprint(self,Node,indent):
if Node is not None:
self.pprint(Node.left, indent+1)
print indent*" ",Node.data
self.pprint(Node.right, indent+1)
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)
Этот код выполняется без ошибок, но мой выходнепредвиденное выход бинарное дерево поиска в питона
OBAMA
Я не могу понять, почему этот код не имеет ошибок во время выполнения, но только добавить первый узел в дерево
ОК, я закончил тем, что избавился от метода __add и рекурсии. Это похоже на http://python.pastebin.com/m1de4a7c8 –
О, я не видел сообщение об ошибке внизу. Это должно быть само собой разумеющимся - вы проверяете 'curNode.left' перед тем, как проверить, является ли' curNode' 'None'. – danben
@ danben на самом деле это будет верно, только если 'left' или' right' '' '' '' '' и 'не будут проверять' right', если 'left' уже является ложным значением. Я думаю, что это запутанное выражение, хотя –