T.j. Oney
New member
- Joined
- Apr 9, 2011
- Messages
- 2
- Programming Experience
- 1-3
I have a delete method for a binary search tree. It only deletes the last two entered values. When trying to delete the root or anything to left of it it returns a null pointer exception.
Public Function Delete(ByVal key As Integer) As Boolean
Dim current As Node = root
Dim parent As Node = root
Dim isLeftChild As Boolean = True
While (current.value <> key)
parent = current
If (key < current.value) Then
isLeftChild = True
current = current.rightNode
Else
isLeftChild = False
current = current.rightNode
End If
If (current Is Nothing) Then
Return False
End If
End While
If (current.leftNode Is Nothing And current.rightNode Is Nothing) Then
If (current Is root) Then
root = Nothing
ElseIf (isLeftChild) Then
parent.leftNode = Nothing
Else
parent.rightNode = Nothing
End If
ElseIf (current.rightNode Is Nothing) Then
If (current Is root) Then
root = current.leftNode
ElseIf (isLeftChild) Then
parent.leftNode = current.leftNode
Else
parent.rightNode = current.rightNode
End If
ElseIf (current.leftNode Is Nothing) Then
If (current Is root) Then
root = current.rightNode
ElseIf (isLeftChild) Then
parent.leftNode = parent.rightNode
Else
parent.rightNode = current.rightNode
End If
Else
Dim successor As Node = getSuccessor(current)
If (current Is root) Then
parent.leftNode = successor
Else
parent.rightNode = successor
End If
successor.leftNode = current.leftNode
End If
Return True
End Function
Thanks in advance for the help
Public Function Delete(ByVal key As Integer) As Boolean
Dim current As Node = root
Dim parent As Node = root
Dim isLeftChild As Boolean = True
While (current.value <> key)
parent = current
If (key < current.value) Then
isLeftChild = True
current = current.rightNode
Else
isLeftChild = False
current = current.rightNode
End If
If (current Is Nothing) Then
Return False
End If
End While
If (current.leftNode Is Nothing And current.rightNode Is Nothing) Then
If (current Is root) Then
root = Nothing
ElseIf (isLeftChild) Then
parent.leftNode = Nothing
Else
parent.rightNode = Nothing
End If
ElseIf (current.rightNode Is Nothing) Then
If (current Is root) Then
root = current.leftNode
ElseIf (isLeftChild) Then
parent.leftNode = current.leftNode
Else
parent.rightNode = current.rightNode
End If
ElseIf (current.leftNode Is Nothing) Then
If (current Is root) Then
root = current.rightNode
ElseIf (isLeftChild) Then
parent.leftNode = parent.rightNode
Else
parent.rightNode = current.rightNode
End If
Else
Dim successor As Node = getSuccessor(current)
If (current Is root) Then
parent.leftNode = successor
Else
parent.rightNode = successor
End If
successor.leftNode = current.leftNode
End If
Return True
End Function
Thanks in advance for the help