Хранить записи в двоичном дереве, используя Python

1

Я хочу сохранить запись студентов в двоичном дереве. Я реализую его в Python.

Запись студента будет иметь три значения,

StudentName, RollNo, Grade

Пример,

John 4 A
Josh 2 B
Kevin 3 A

Я могу реализовать одно двоичное дерево и вставить в него отдельные значения. Но, чтобы хранить записи студентов, мне нужно использовать три бинарных дерева? а затем как сопоставить значения?

Это простая реализация B-Tree в python с вставкой одного значения.

#!/usr/bin/python

class Node:
    def __init__(self, val):
        self.l = None
        self.r = None
        self.v = val

class Tree:
    def __init__(self):
        self.root = None

    def getRoot(self):
        return self.root

    def add(self, val):
        if(self.root == None):
            self.root = Node(val)
        else:
            self._add(val, self.root)

    def _add(self, val, node):
        if(val < node.v):
            if(node.l != None):
                self._add(val, node.l)
            else:
                node.l = Node(val)
        else:
            if(node.r != None):
                self._add(val, node.r)
            else:
                node.r = Node(val)

    def find(self, val):
        if(self.root != None):
            return self._find(val, self.root)
        else:
            return None

    def _find(self, val, node):
        if(val == node.v):
            return node
        elif(val < node.v and node.l != None):
            self._find(val, node.l)
        elif(val > node.v and node.r != None):
            self._find(val, node.r)

    def deleteTree(self):
        # garbage collector will do this for us. 
        self.root = None

    def printTree(self):
        if(self.root != None):
            self._printTree(self.root)

    def _printTree(self, node):
        if(node != None):
            self._printTree(node.l)
            print str(node.v) + ' '
            self._printTree(node.r)

#     3
# 0     4
#   2      8
tree = Tree()
tree.add(3)
tree.add(4)
tree.add(0)
tree.add(8)
tree.add(2)
tree.printTree()
print (tree.find(3)).v
print tree.find(10)
tree.deleteTree()
tree.printTree()

Каков рекомендуемый способ его достижения?

Я хочу запросить, например,

Get the rollNo where studentName='John'

Выход :-

4

Status (Fetch all the records): -

Выход :-

John 4 A
Josh 2 B
Kevin 3 A
  • 0
    Какие деревья (или структуры в целом) вы используете, зависит от того, какие запросы вы хотите (эффективно). Вы должны сказать, что это решать.
  • 0
    Привет Дэвис, я обновил вопрос с вопросами, которые я хочу сделать. Пожалуйста, проверьте.
Теги:
algorithm
data-structures

1 ответ

0

Если единственным ключом, по которому нужно искать отдельные записи, является имя, вы можете использовать одно дерево, отсортированное по имени. Однако каждый узел должен хранить запись while. Вы либо вводите тип, который имеет все три поля, но определяет <, > и == (используется в Tree._find) для сравнения только имени или добавления поддержки Tree для использования пользовательской функции компаратора.

Последнее предпочтительнее, поскольку оно позволяет избежать странного смысла для операторов в другом коде; одной функции достаточно, если она реализует <, потому что вы можете написать

if less(val,node.v): # ...
elif less(node.v,val): # ...
else: return node  # equal

Ещё вопросы

Сообщество Overcoder
Наверх
Меню