Skip to content

Commit 3844e9f

Browse files
RequireSuntrekhleb
authored andcommitted
fix: correct the wrong code of Deletion (trekhleb#263)
1 parent e4ba378 commit 3844e9f

File tree

1 file changed

+24
-12
lines changed
  • src/data-structures/tree/binary-search-tree

1 file changed

+24
-12
lines changed

src/data-structures/tree/binary-search-tree/README.md

+24-12
Original file line numberDiff line numberDiff line change
@@ -103,19 +103,31 @@ remove(value)
103103
else
104104
parent.right ← nodeToRemove.right
105105
end if
106-
else if nodeToRemove.left = ø and nodeToRemove.right = ø
107-
if nodeToRemove.value < parent.value
108-
parent.left ← nodeToRemove.left
109-
else
110-
parent.right ← nodeToRemove.left
111-
end if
106+
else if nodeToRemove.left != ø and nodeToRemove.right != ø
107+
next ← nodeToRemove.right
108+
while next.left != ø
109+
next ← next.left
110+
end while
111+
if next != nodeToRemove.right
112+
remove(next.value)
113+
nodeToRemove.value ← next.value
114+
else
115+
nodeToRemove.value ← next.value
116+
nodeToRemove.right ← nodeToRemove.right.right
117+
end if
112118
else
113-
largestValue ← nodeToRemove.left
114-
while largestValue.right = ø
115-
largestValue ← largestValue.right
116-
end while
117-
findParent(largestValue.value).right ← ø
118-
nodeToRemove.value ← largestValue.value
119+
if nodeToRemove.left = ø
120+
next ← nodeToRemove.right
121+
else
122+
next ← nodeToRemove.left
123+
end if
124+
if root = nodeToRemove
125+
root = next
126+
else if parent.left = nodeToRemove
127+
parent.left = next
128+
else if parent.right = nodeToRemove
129+
parent.right = next
130+
end if
119131
end if
120132
count ← count - 1
121133
return true

0 commit comments

Comments
 (0)