0
我成功創建了一個BST,它從文本文件中讀取數據並相應地連接節點,儘管處於不平衡的方式,但現在我遇到了用戶輸入問題。手動添加到二進制搜索樹
這裏是一個什麼樣的文本文件中的行看起來像一個例子:
student id1, mark1, mark2, mark3, mark4, mark5, midterm mark, exam mark
我的函數變成一個BST這個樣子的:
def marks(tree, Data):
global assignment1
global assignment2
global assignment3
global assignment4
global assignment5
global midterm
global exam
global counter
for students in Data[:len(Data)-2]:
data = students.split(',')
assignment1 += float(data[1])
assignment2 += float(data[2])
assignment3 += float(data[3])
assignment4 += float(data[4])
assignment5 += float(data[5])
midterm += float(data[6])
exam += float(data[7])
if float(data[7]) < 32.5:
counter+=1
tree = add(tree, data)
return tree
def add(tree, data):
if tree == None:
tree = {'data':data,'left':None, 'right':None}
return tree
elif data[0] < tree['data'][0]:
tree['left'] = add(tree['left'], data)
return tree
elif data[0] > tree['data'][0]:
tree['right'] = add(tree['right'], data)
return tree
這將產生一個BST,但現在我想創建一個允許手動添加到BST中的函數(始終在葉子上添加)。
def manual_addition(myTree):
new_student = {}
student_id = input("Please enter the student id: ")
hw1 = input("Please enter their first assignment mark: ")
hw2 = input("Please enter their second assignment mark: ")
hw3 = input("Please enter their third assignment mark: ")
hw4 = input("Please enter their fourth assignment mark: ")
hw5 = input("Please enter their fifth assignment mark: ")
midterm = input("Please enter their midterm mark: ")
exam = input("Please enter their final exam mark: ")
new_student = [student_id, hw1, hw2, hw3, hw4, hw5, midterm, exam]
myTree = add(myTree, new_student)
return myTree
然而,當我打印我的BST,例如,如果我輸入的ID是300,它出現在一個id比2000年更大的應該出現在最左邊我的BST的右邊,因爲文本文件中最低的ID是2000.我的錯誤是什麼?