1 import random
2 class BST():
3 left = None
4 right = None
5 data = None
6 def __init__(self, data):
7 self.data = data
8 # 插入操作
9 def BSTInsert(previous, root, value):
10 #root代表上一次的节点,previou代表要插入的节点的父母
11 #遍历到外层时,从19或20行的right或者left为空时,则新申请节点,插入到父母下面
12 if root is None:
13 if value > previous.data:#若大于双亲的值,则插入到父母右子树
14 previous.right = BST(value)
15 else :#否则,插入父母到左子树上
16 previous.left = BST(value)
17 return True
18 elif value==root.data:#和树中某个节点值相等,插入失败。因为BST要求 左<跟<右
19 return False
20 elif value > root.data:#继续深入递归,若value > 当前节点,转向右子树去递归。
21 #直到root.right或者root.left节点为空,说明走到头了,此时转到11行,执行插入
22 return BSTInsert(root, root.right, value)
23 else:
24 return BSTInsert(root, root.left, value)
25 #中序遍历
26 def InOrder(root):
27 if root is not None:
28 InOrder(root.left)
29 print(root.data)
30 InOrder(root.right)
31 #先序遍历
32 def PreOrder(root):
33 if root is not None:
34 print(root.data)
35 InOrder(root.left)
36 InOrder(root.right)
37 #后序遍历
38 def PostOrder(root):
39 if root is not None:
40 InOrder(root.left)
41 InOrder(root.right)
42 print(root.data)
43
44 def BSTSearch(root, value):
45 if root is None:
46 return None
47 while root is not None:
48 if value > root.data:
49 root = root.right
50 elif value < root.data:
51 root = root.left
52 else:
53 return root
54 return None
55 #根节点10
56 root = BST(10)
57 #插入范围0到500的随机数
58 for i in range(100):
59 BSTInsert(None, root, random.randint(0,500))
60 #中遍历输出结果:从小到大
61 InOrder(root)
62 #搜索111的地址
63 print(BSTSearch(root, 111))