2013-11-22 7 views
1

파이썬에서 이진 검색 트리를 구현하려고하는데 삭제할 솔루션을 찾을 수 없습니다. 항목이 리프에 있으면 간단하지만 삭제하려는 항목에 다른 하위 항목이있는 2 명의 하위 항목이있는 경우 어떻게됩니까? 후임자를 어떻게 찾을 수 있습니까? 간단한 재귀 적 솔루션이 있습니까?이진 검색 트리 파이썬, 구현 구현

class Node: 

    def __init__(self, data=None, left=None, right=None): 
     self.data = data 
     self.left = left 
     self.right = right  


class BinarySearchTree: 


    def __init__(self, root=None): 
     self.root = Node(root) 


    def add(self, data, node): 

     if node == None: 
      node = Node(data) 
      return True 

     if data < node.data: 
      if node.left == None: 
       node.left = Node(data) 
       return True 
      else: 
       self.add(data, node.left) 
     elif data > node.data: 
      if node.right == None: 
       node.right = Node(data) 
       return True 
      else: 
       self.add(data, node.right) 


    def preorder(self, node): 
     if node != None: 
      print(node.data) 
      self.preorder(node.left) 
      self.preorder(node.right) 

    def inorder(self, node): 
     if node != None: 
      self.inorder(node.left) 
      print(node.data) 
      self.inorder(node.right) 

    def postorder(self, node): 
     if node != None: 
      self.postorder(node.left) 
      self.postorder(node.right) 
      print(node.data) 


    def retreive(self,item): 

     node = self.root 

     while node != None: 
      if node.data == item: 
       break 
      elif item < node.data: 
       if node.left != None: 
        if node.left.data == item: 
         node.left = None 
         return True 
       node = node.left 
      else: 
       if node.right != None: 
        if node.right.data == item: 
         node.right= None 
         return True 
       node = node.right 

     if node == None:     
      return False 

tree = BinarySearchTree() 
root=Node(3) 
tree.add(55,root) 
tree.add(5,root) 
tree.add(13,root) 
tree.add(2,root) 
tree.add(3,root) 
tree.preorder(root) 
tree.postorder(root) 
tree.inorder(root) 

또한 내가 지금까지 작성한 내용에 대한 제안 사항이 있으면 정말 감사하겠습니다. 미리 감사드립니다. 이 숙제가 아닌 경우

+2

[Wikipedia article] (http://en.wikipedia.org/wiki/Binary_search_tree#Deletion)에는 여기에서 사용할 방법에 대한 설명이 있습니다. –

답변