binary tree function not defined... in python

Viewed 22

I am trying to figure out how to write code for binary trees in python and this error keeps coming that a certain function is not defined.

class Node:
    def __init__(self , value):
        self.v = value
        self.right = None
        self.left = None
        
    def insert(self , value):
        if self.value:
            if value < self.value:
                if self.left is None:
                    self.left = Node(value)
                else:
                    self.left.insert(value)
            elif value > self.value:
                if self.right is None:
                    self.right = Node(value)
                else:
                    self.right.insert(value)
            else:
                self.value = value
#     def in_order_traversal(self):
        
#     def print(self):
#         self.in_order_traversal()
if __name__ == '__main__':
    r = Node

the error this code gives me is "name 'Node' is not defined"

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Input In [16], in <cell line: 1>()
----> 1 class Node:
      2     def __init__(self , value):
      3         self.v = value

Input In [16], in Node()
     21 #     def in_order_traversal(self):
     22         
     23 #     def print(self):
     24 #         self.in_order_traversal()
     25     if __name__ == '__main__':
---> 26         r = Node

NameError: name 'Node' is not defined

what is wrong? what do I need to do?

2 Answers

R = Node is not valid , use r = Node(value)

The first mistake you were doing was Node calling without value as it required 1 arguments. 2nd mistake is in assigning the value in Node to self.v while in condition you are always pointing this value with self.value

class Node:
    def __init__(self , value):
        self.value = value
        self.right = None
        self.left = None
        
    def insert(self , value):
        if self.value:
            if value < self.value:
                if self.left is None:
                    self.left = Node(value)
                else:
                    self.left.insert(value)
            elif value > self.value:
                if self.right is None:
                    self.right = Node(value)
                else:
                    self.right.insert(value)
            else:
                self.value = value
    # def in_order_traversal(self):
        
    # def print(self):
    #     self.in_order_traversal()
        
        
if __name__ == '__main__':
    r = Node(50)
    # r.Node(50)
    r.insert(30)
    r.insert(20)
    
Related