Himanjli Jain
Himanjli Jain

Reputation: 57

Binary Search trees implementation using python

class Node:
    def __init__(self, data, parent):
        self.leftChild = None
        self.rightChild = None
        self.parent = parent
        self.data = data

class BST:

    def __init__(self):
        self.root = None
        self.count = 0


    def insert(self, data):
        self.count +=1
        if self.root is None:
            self.root = Node(data, None)
        else:
            self.insertNode(data,self.root)


    def insertNode(self, data, parentNode):
        if data < parentNode.data:
            if parentNode.leftChild is not None:
                self.insertNode(data, parentNode.leftChild)
            else:
                parentNode.leftChild = Node(data, parentNode)
        else:
            if parentNode.rightChild is not None:
                self.insertNode(data, parentNode.rightChild)
            else:
                parentNode.rightChild = Node(data, parentNode)


    def get_max(self, node):
        if node.rightChild:
            self.get_max(node.rightChild)
        else:
            print(node.data)
            # return node.data
        # return node.data


    def traverse(self):
        if(self.root is not None):
            self.traverse_InOrder(self.root)

    def traverse_InOrder(self, node):
        if node.leftChild is not None:
            self.traverse_InOrder(node.leftChild)
        print(node.data, end=" ")
        if node.rightChild is not None:
            self.traverse_InOrder(node.rightChild)

bst = BST()
bst.insert(22)
bst.insert(2)
bst.insert(21)
bst.insert(23)
bst.insert(45)
bst.insert(43)
bst.insert(20)
bst.traverse()
print()
bst.get_max(bst.root)
print(bst.get_max(bst.root))

In the get_max function when I'm printing node.data it's working fine, but as soon as I'm returning the data and trying to print it as shown in last line of code, it's returning none. I don't understand the underlying concept behind it. Maybe it is something that I'm doing wrong. Please explain.

Upvotes: 0

Views: 37

Answers (1)

bp7070
bp7070

Reputation: 312

Change the get_max function so it returns the rightmost node:

def get_max(self, node):
    if node.rightChild:
        return self.get_max(node.rightChild)
    else:
        return node.data

Upvotes: 1

Related Questions