栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[硕.Love Python] BinarySearchTree(二叉搜索树)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[硕.Love Python] BinarySearchTree(二叉搜索树)

class Node(object):
    __slots__ = ['left', 'right', 'data']

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

    def __str__(self):
 sl = '%s <-' % self.left if self.left else ''
 sr = '-> %s' % self.right if self.right else ''
 return '[%s Node(%s) %s]' % (sl, self.data, sr)

class BinarySearchTree(object):
    def __init__(self):
 self.root = None

    def insert(self, data):
 node, parent = self.search(data, True)
 if node:
     raise ValueError('"%s" has been in tree.' % data)

 node = Node(data)
 if parent is None:
     self.root = node
 elif data < parent.data:
     parent.left = node
 else:
     parent.right = node 

    def search(self, data, retParent=False):
 parent = None
 node = self.root

 while node and node.data != data:
     parent = node
     if data < node.data:
  node = node.left
     else:
  node = node.right

 return (node, parent) if retParent else node

    def delete(self, data):
 self._deleteNode(*self.search(data, True))

    def _findBiggest(self, node):
 parent = None
 while node.right:
     parent = node
     node = node.right
 return node, parent

    def _deleteNode(self, node, parent):
 if node is None:
     return 

 if node.left and node.right:
     tmp, tmpParent = self._findBiggest(node.left)
     if tmpParent is not None:
  tmpParent.right = tmp.left
  tmp.left = node.left 
     tmp.right = node.right
 else:
     tmp = node.left or node.right

 if parent is None:
     self.root = tmp
 elif parent.left is node:
     parent.left = tmp
 else:
     parent.right = tmp

if __name__ == '__main__':
    bst = BinarySearchTree()
    while True:
 cmd = (raw_input('$ ')).strip().split()
 if cmd[0] == 'i':
     bst.insert(int(cmd[1]))
     print bst.root
 elif cmd[0] == 'd':
     bst.delete(int(cmd[1]))
     print bst.root
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/225960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号