-1

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?

name__
  • 49
  • 1
  • 1
  • 12
  • Please include the full traceback Error. Though I suspect it's complaining on the line ```r.Node(50)```. What's the purpose of ```r = Node``` and then you ```r.Node(50)```? – ewokx Sep 23 '22 at 05:32
  • @ewokx i edited the question with traceback error – name__ Sep 23 '22 at 05:40
  • 1
    Are you certain you have the right indentation in your code? In the traceback, the ```if __name__ -- '__main__':``` code seems to be indented to be considered inside the ```class Node``` block. – ewokx Sep 23 '22 at 05:45
  • There are many issues with this code. My recommendation is to review the fundamentals. – Karl Knechtel Sep 23 '22 at 05:50

2 Answers2

0

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

Ftoy
  • 26
  • 6
  • Actually, ```r = Node``` is valid syntax; just it's not exactly what is the OP's intention. – ewokx Sep 23 '22 at 05:47
0

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)