Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- BstNode = ref object
- data: int
- left: BstNode
- right: BstNode
- proc deleteNode(node: var BstNode, data: int): bool =
- if node == nil:
- return false
- if data == node.data:
- if node.left != nil and node.right != nil: # Handle two children
- #node.data = getMin(node.right, node.right).data
- var tempnode = getMin(node.right, node.right)
- var temp1 = node.left
- var temp2: BstNode
- var tempdata = tempnode.data
- if tempnode.right != nil:
- temp2 = node.right.right
- else:
- tempnode = nil
- echo tempnode
- echo $(node.right)
- temp2 = node.right
- echo node.right.data
- node.data = tempdata
- node.left = temp1
- node.right = temp2
- return true
- if node.left != nil and node.right == nil: # Handle left with single child
- node.data = node.left.data
- node.left = nil
- return true
- if node.left == nil and node.right != nil: # Handle right with single child
- node.data = node.right.data
- node.right = nil
- return true
- if node.left == nil and node.right == nil: # Handle leaf node
- node = nil
- return true
- if data < node.data:
- return deleteNode(node.left, data)
- else:
- return deleteNode(node.right, data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement