class BSTNode:

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

        self.data = data
self.left = left
self.right = right class BinarySortTree: def __init__(self):
self._root = None def is_empty(self):
return self._root is None def search(self, key): bt = self._root
while bt:
entry = bt.data
if key < entry:
bt = bt.left
elif key > entry:
bt = bt.right
else:
return entry
return None def insert(self, key): bt = self._root
if not bt:
self._root = BSTNode(key)
return
while True:
entry = bt.data
if key < entry:
if bt.left is None:
bt.left = BSTNode(key)
return
bt = bt.left
elif key > entry:
if bt.right is None:
bt.right = BSTNode(key)
return
bt = bt.right
else:
bt.data = key
return def delete(self, key): p, q = None, self._root
if not q:
print("empty tree")
return
while q and q.data != key:
p = q
if key < q.data:
q = q.left
else:
q = q.right
if not q:
return if not q.left:
if p is None:
self._root = q.right
elif q is p.left:
p.left = q.right
else:
p.right = q.right
return r = q.left
while r.right:
r = r.right
r.right = q.right
if p is None:
self._root = q.left
elif p.left is q:
p.left = q.left
else:
p.right = q.left def __iter__(self): stack = []
node = self._root
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
yield node.data
node = node.right lis = [62, 58, 88, 48, 73, 99, 35, 51, 93, 29, 37, 49, 56, 36, 50]
bs_tree = BinarySortTree()
for i in range(len(lis)):
bs_tree.insert(lis[i])
# bs_tree.insert(100)
bs_tree.delete(58)
for i in bs_tree:
print(i, end=" ")
# print("\n", bs_tree.search(4))

  

最新文章

  1. Android平台下OpenCV移植与使用---基于C/C++
  2. SQLSERVER如何查看索引缺失
  3. spoj1811 Longest Common Substring
  4. Jena学习笔记(2)——利用数据库保存本体
  5. 【JNI】C分支
  6. zw版【转发&#183;台湾nvp系列Delphi例程】HALCON InpaintingCt1
  7. css3太极图效果+自动旋转
  8. Lucene.Net 2.3.1开发介绍 —— 二、分词(二)
  9. ffempg支持文件解码
  10. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载
  11. Taro之使用百度地图
  12. 【转】shell速查表
  13. django通过添加session来保存公共变量
  14. (1-2)line-height的各类属性值
  15. c# 简易绘制C语言头文件包含关系图 v2.0
  16. LUA可变长参数 ... 三个点
  17. 关于Unity中场景的导入与导出(专题九)
  18. em和px比较
  19. 20165310java_blog_week7
  20. 新概念 Lesson 5 How are you today

热门文章

  1. checkbox选择
  2. [LeetCode] 190. Reverse Bits_Easy tag: Bit Manipulation
  3. Impala和Hive的关系(详解)
  4. Linux用root强制踢掉已登录用户
  5. 百度云盘-真实地址 F12 控制台
  6. 华为C/C++笔试题&amp;答案
  7. OpenCV实现SfM(三):多目三维重建
  8. gcc与glibc关系
  9. this逃逸
  10. linux内核分析 第五周