키(key)를 이용해서 노드를 찾는다.
=> 해당 키의 노드가 없으면, 삭제할 것도 없음
=> 찾은 노드의 부모 노드도 알고 있어야 함
찾은 노드를 제거하고도 이진 탐색 트리 성질을 만족하도록 트리의 구조를 정리해야한다.
class BinSearchTree:
def remove(self,key):
node, parent = self.lookup(key)
if node:
return True
else:
return Falseclass Node:
def countChildren(self):
count = 0
if sef.left:
count += 1
if self.right:
count += 1
return count
만약 삭제되는 노드 (X)가 root node인 경우는 어떻게?
==> 트리 전체가 없어진다.
T = BinSearchTree()
T.insert(1,'John')
T.insert(2,'Mary')
T.insert(3,'Anne')
T.insert(4,'Peter')
=> 만약 4를 찾는다면 선형탐색과 동등한 정도의 복잡도를 가지게 된다.
=> 트리의 왼쪽 오른쪽이 반반씩 갈려있으면 logn과 같은 복잡도를 가질 수 있게 되어 효율적이다.
===> 보다 나은 성능을 보이는 이진 탐색 트리들
높이의 균형을 유지함으로써 O(logn)의 탐색 복잡도 보장 삽입, 삭제 연산이 보다 복잡하다.