简体   繁体   中英

Deleting node from Binary Search Tree

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)



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->

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM