1

I am generating a Binary Search Tree from list of integers and everything works fine, but when I implement the function to remove node (deleteNode). I get an error
AttributeError: 'int' object has no attribute 'value'

I know this error mean that I am trying to access an attribute that does not exist on an integer. But I don't know how I can make it work. Here is my whole code so far.


numbers = [8, 10, 14, 3, 1, 6, 4, 7]
print(f"My numbers: {numbers}")
class Node:
 def __init__(self, value):
 self.value = value
 self.left = None
 self.right = None
def insert_node(node, value):
 if node == None:
 return Node(value)
 if value < node.value:
 node.left = insert_node(node.left, value)
 else:
 node.right = insert_node(node.right, value)
 return node
def inorder(root):
 if root is not None:
 inorder(root.left)
 print(str(root.value) + "->", end=' ')
 inorder(root.right)
def min_value(node):
 current = node
 while(current.left is not None):
 current = current.left
 return current.value
def deleteNode(root, value):
 if root is None:
 return root
 if value < root.value:
 root.left = deleteNode(root.left, value)
 elif(value > root.value):
 root.right = deleteNode(root.right, value)
 else:
 if root.left is None:
 temp = root.right
 root = None
 return temp
 elif root.right is None:
 temp = root.left
 root = None
 return temp
 temp = min_value(root.right)
 root.value = temp.value
 root.right = deleteNode(root.right, temp.value)
 return root
root = None
for i in range(len(numbers)):
 root = insert_node(root, numbers[i])
print(f"\nInorder traversal: ")
inorder(root)
print("\nDelete 3")
root = deleteNode(root, 3)
print("Inorder traversal: ", end=' ')
inorder(root)
asked May 23, 2022 at 9:56

1 Answer 1

3

Change every temp.value to temp. Because temp is itself an integer and temp.value gives error because int doesn't have an attribute called value.

Code that has to be changed:

temp = min_value(root.right)
root.value = temp
root.right = deleteNode(root.right, temp)

Output:

My numbers: [8, 10, 14, 3, 1, 6, 4, 7]
Inorder traversal:
1-> 3-> 4-> 6-> 7-> 8-> 10-> 14->
Delete 3
Inorder traversal: 1-> 4-> 6-> 7-> 8-> 10-> 14->
answered May 23, 2022 at 10:01
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.