@@ -16,21 +16,18 @@ def __init__(self, root: typing.Optional[TreeNode] = None):
16
16
self .root = root
17
17
18
18
""" 获取结点高度 """
19
-
20
19
def height (self , node : typing .Optional [TreeNode ]) -> int :
21
20
# 空结点高度为 -1 ,叶结点高度为 0
22
21
if node is not None :
23
22
return node .height
24
23
return - 1
25
24
26
25
""" 更新结点高度 """
27
-
28
26
def __update_height (self , node : TreeNode ):
29
27
# 结点高度等于最高子树高度 + 1
30
28
node .height = max ([self .height (node .left ), self .height (node .right )]) + 1
31
29
32
30
""" 获取平衡因子 """
33
-
34
31
def balance_factor (self , node : TreeNode ) -> int :
35
32
# 空结点平衡因子为 0
36
33
if node is None :
@@ -39,7 +36,6 @@ def balance_factor(self, node: TreeNode) -> int:
39
36
return self .height (node .left ) - self .height (node .right )
40
37
41
38
""" 右旋操作 """
42
-
43
39
def __right_rotate (self , node : TreeNode ) -> TreeNode :
44
40
child = node .left
45
41
grand_child = child .right
@@ -53,7 +49,6 @@ def __right_rotate(self, node: TreeNode) -> TreeNode:
53
49
return child
54
50
55
51
""" 左旋操作 """
56
-
57
52
def __left_rotate (self , node : TreeNode ) -> TreeNode :
58
53
child = node .right
59
54
grand_child = child .left
@@ -67,7 +62,6 @@ def __left_rotate(self, node: TreeNode) -> TreeNode:
67
62
return child
68
63
69
64
""" 执行旋转操作,使该子树重新恢复平衡 """
70
-
71
65
def __rotate (self , node : TreeNode ) -> TreeNode :
72
66
# 获取结点 node 的平衡因子
73
67
balance_factor = self .balance_factor (node )
@@ -93,13 +87,11 @@ def __rotate(self, node: TreeNode) -> TreeNode:
93
87
return node
94
88
95
89
""" 插入结点 """
96
-
97
90
def insert (self , val ) -> TreeNode :
98
91
self .root = self .__insert_helper (self .root , val )
99
92
return self .root
100
93
101
94
""" 递归插入结点(辅助函数)"""
102
-
103
95
def __insert_helper (self , node : typing .Optional [TreeNode ], val : int ) -> TreeNode :
104
96
if node is None :
105
97
return TreeNode (val )
@@ -117,13 +109,11 @@ def __insert_helper(self, node: typing.Optional[TreeNode], val: int) -> TreeNode
117
109
return self .__rotate (node )
118
110
119
111
""" 删除结点 """
120
-
121
112
def remove (self , val : int ):
122
113
root = self .__remove_helper (self .root , val )
123
114
return root
124
115
125
116
""" 递归删除结点(辅助函数) """
126
-
127
117
def __remove_helper (self , node : typing .Optional [TreeNode ], val : int ) -> typing .Optional [TreeNode ]:
128
118
if node is None :
129
119
return None
@@ -142,7 +132,7 @@ def __remove_helper(self, node: typing.Optional[TreeNode], val: int) -> typing.O
142
132
else :
143
133
node = child
144
134
else : # 子结点数量 = 2 ,则将中序遍历的下个结点删除,并用该结点替换当前结点
145
- temp = self .min_node (node .right )
135
+ temp = self .__min_node (node .right )
146
136
node .right = self .__remove_helper (node .right , temp .val )
147
137
node .val = temp .val
148
138
# 更新结点高度
@@ -151,8 +141,7 @@ def __remove_helper(self, node: typing.Optional[TreeNode], val: int) -> typing.O
151
141
return self .__rotate (node )
152
142
153
143
""" 获取最小结点 """
154
-
155
- def min_node (self , node : typing .Optional [TreeNode ]) -> typing .Optional [TreeNode ]:
144
+ def __min_node (self , node : typing .Optional [TreeNode ]) -> typing .Optional [TreeNode ]:
156
145
if node is None :
157
146
return None
158
147
# 循环访问左子结点,直到叶结点时为最小结点,跳出
@@ -161,7 +150,6 @@ def min_node(self, node: typing.Optional[TreeNode]) -> typing.Optional[TreeNode]
161
150
return node
162
151
163
152
""" 查找结点 """
164
-
165
153
def search (self , val : int ):
166
154
cur = self .root
167
155
# 循环查找,越过叶结点后跳出
@@ -179,8 +167,8 @@ def search(self, val: int):
179
167
return cur
180
168
181
169
170
+ """ Driver Code """
182
171
if __name__ == "__main__" :
183
-
184
172
def test_insert (tree : AVLTree , val : int ):
185
173
tree .insert (val )
186
174
print ("\n 插入结点 {} 后,AVL 树为" .format (val ))
0 commit comments