Двоичное дерево для Python, get Root не возвращает root - PullRequest
0 голосов
/ 11 июля 2020

Я просматривал этот код двоичного дерева, чтобы понять, что он делает:

class BinaryTree:
    def __init__(self):
        self.root = None
        self.size = 0

    # Insert element e into the binary search tree
    # Return True if the element is inserted successfully 
    def insert(self, e):
        if self.root == None:
            self.root = self.createNewNode(e) # Create a new root
        else:
            # Locate the parent node
            parent = None
            current = self.root
            while current != None:
                if e < current.element:
                    parent = current
                    current = current.left
                elif e > current.element:
                    parent = current
                    current = current.right
                else:
                    return False # Duplicate node not inserted

            # Create the new node and attach it to the parent node
            if e < parent.element:
                parent.left = self.createNewNode(e)
            else:
                parent.right = self.createNewNode(e)

        self.size += 1 # Increase tree size
        return True # Element inserted

    # Create a new TreeNode for element e
    def createNewNode(self, e):
        return TreeNode(e)

    # Return the size of the tree
    def getSize(self):
        return self.size

    # Return true if the tree is empty
    def isEmpty(self):
        return self.size == 0
        
    # Remove all elements from the tree
    def clear(self):
        self.root == None
        self.size == 0

    # Return the root of the tree
    def getRoot(self):
        return self.root

class TreeNode:
    def __init__(self, e):
        self.element = e
        self.left = None  # Point to the left node, default None
        self.right = None # Point to the right node, default None

Если я сделаю следующий код:

tree = BinaryTree()
tree.insert("500")
print(tree.getRoot)
print(tree.getRoot())

Результат:

<bound method BinaryTree.getRoot of <__main__.BinaryTree object at 0x036E1E68>>
<__main__.TreeNode object at 0x036FA1F0>

Я бы не получил обратно строку «500», хотя это root. Что-то не хватает функции get Root? Я не могу найти причину, по которой функция не может вернуть строку.

1 Ответ

0 голосов
/ 11 июля 2020

tree.getRoot - это метод объекта BinaryTree. И tree.getRoot() вызывает метод и возвращает объект TreeNode. Если вы хотите получить «500», вы должны получить его свойство element.

Итак, вы можете попробовать следующий код:

tree = BinaryTree()
tree.insert("500")
print(tree.getRoot().element)

, который печатает

500
...