Это опечатка,
if bkID < cur_node.bkID:
должно быть:
if bkID < cur_node.bookID:
Проверьте обновленный код:
class bookNode:
def __init__(self, bkID, availCount):
self.bookID = bkID
self.avCntr = availCount
self.ChkOutCntr = 0
self.left = None
self.right = None
class Tree:
def __init__(self):
self.root = None
def readBookList(self, bkID, availCount):
if self.root == None:
self.root = bookNode(bkID, availCount)
else:
self._readBookList(bkID,availCount,self.root)
def _readBookList(self,bkID, availCount, cur_node):
if cur_node != None :
if bkID < cur_node.bookID:
if cur_node.left == None:
cur_node.left = bookNode(bkID, availCount)
# cur_node.left_child.parent = cur_node # set parent
else:
self._readBookList(bkID, availCount, cur_node.left)
elif bkID > cur_node.bookID:
if cur_node == None:
cur_node = bookNode(bkID,availCount)
# cur_node.right_child.parent = cur_node # set parent
else:
self._readBookList(bkID,availCount, cur_node.right)
else:
print("ID already in tree!")
def print_tree(self):
if self.root != None:
self._print_tree(self.root)
def _print_tree(self, cur_node):
if cur_node != None:
self._print_tree(cur_node.left)
print(cur_node.bookID)
self._print_tree(cur_node.right)
tree = Tree()
f = open("input.txt", "r")
for x in f:
print(x)
bookDetails = x.split(",")
tree.readBookList(bookDetails[0], bookDetails[1])
# _readBookList
f.close()
tree.print_tree()
Проблема в строке , self._readBookList(bkID,availCount, cur_node.right)
, здесь вы не проверяете, cur_node.right
не None
или нет. Я его обновил.