2017-08-09 51 views
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.我的錯誤是什麼?

回答

0

事實證明,我忘了做的事情是提到數據類型是浮點數,這讓我感到困惑,因爲我想知道當比較運算符比較字符串時,二進制搜索樹是如何創建的。