File tree Expand file tree Collapse file tree 1 file changed +64
-0
lines changed Expand file tree Collapse file tree 1 file changed +64
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ Binary search tree
3+
4+ Author: Wenru Dong
5+ """
6+ from typing import Optional
7+
8+ class TreeNode :
9+ def __init__ (self , value : int ):
10+ self .val = value
11+ self .left = None
12+ self .right = None
13+
14+ class BinarySearchTree :
15+ def __init__ (self ):
16+ self ._root = None
17+
18+ def find (self , value : int ) -> Optional [TreeNode ]:
19+ node = self ._root
20+ while node and node .val != value :
21+ node = node .left if node .val > value else node .right
22+ return node
23+
24+ def insert (self , value : int ):
25+ if not self ._root :
26+ self ._root = TreeNode (value )
27+ return
28+ parent = None
29+ node = self ._root
30+ while node :
31+ parent = node
32+ node = node .left if node .val > value else node .right
33+ new_node = TreeNode (value )
34+ if parent .val > value :
35+ parent .left = new_node
36+ else :
37+ parent .right = new_node
38+
39+ def delete (self , value : int ):
40+ node = self ._root
41+ parent = None
42+ while node and node .val != value :
43+ parent = node
44+ node = node .left if node .val > value else node .right
45+ if not node : return
46+
47+ # 要删除的节点有两个子节点
48+ if node .left and node .right :
49+ successor = node .right
50+ successor_parent = node
51+ while successor .left :
52+ successor_parent = successor
53+ successor = successor .left
54+ node .val = successor .val
55+ parent , node = successor_parent , successor
56+
57+ # 删除节点是叶子节点或者仅有一个子节点
58+ child = node .left if node .left else node .right
59+ if not parent :
60+ self ._root = child
61+ elif parent .left == node :
62+ parent .left = child
63+ else :
64+ parent .right = child
You can’t perform that action at this time.
0 commit comments