Skip to content

Commit dbb2500

Browse files
committed
Fine tune
1 parent c4d3262 commit dbb2500

File tree

5 files changed

+7
-30
lines changed

5 files changed

+7
-30
lines changed

codes/python/chapter_tree/avl_tree.py

+3-15
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,18 @@ def __init__(self, root: typing.Optional[TreeNode] = None):
1616
self.root = root
1717

1818
""" 获取结点高度 """
19-
2019
def height(self, node: typing.Optional[TreeNode]) -> int:
2120
# 空结点高度为 -1 ,叶结点高度为 0
2221
if node is not None:
2322
return node.height
2423
return -1
2524

2625
""" 更新结点高度 """
27-
2826
def __update_height(self, node: TreeNode):
2927
# 结点高度等于最高子树高度 + 1
3028
node.height = max([self.height(node.left), self.height(node.right)]) + 1
3129

3230
""" 获取平衡因子 """
33-
3431
def balance_factor(self, node: TreeNode) -> int:
3532
# 空结点平衡因子为 0
3633
if node is None:
@@ -39,7 +36,6 @@ def balance_factor(self, node: TreeNode) -> int:
3936
return self.height(node.left) - self.height(node.right)
4037

4138
""" 右旋操作 """
42-
4339
def __right_rotate(self, node: TreeNode) -> TreeNode:
4440
child = node.left
4541
grand_child = child.right
@@ -53,7 +49,6 @@ def __right_rotate(self, node: TreeNode) -> TreeNode:
5349
return child
5450

5551
""" 左旋操作 """
56-
5752
def __left_rotate(self, node: TreeNode) -> TreeNode:
5853
child = node.right
5954
grand_child = child.left
@@ -67,7 +62,6 @@ def __left_rotate(self, node: TreeNode) -> TreeNode:
6762
return child
6863

6964
""" 执行旋转操作,使该子树重新恢复平衡 """
70-
7165
def __rotate(self, node: TreeNode) -> TreeNode:
7266
# 获取结点 node 的平衡因子
7367
balance_factor = self.balance_factor(node)
@@ -93,13 +87,11 @@ def __rotate(self, node: TreeNode) -> TreeNode:
9387
return node
9488

9589
""" 插入结点 """
96-
9790
def insert(self, val) -> TreeNode:
9891
self.root = self.__insert_helper(self.root, val)
9992
return self.root
10093

10194
""" 递归插入结点(辅助函数)"""
102-
10395
def __insert_helper(self, node: typing.Optional[TreeNode], val: int) -> TreeNode:
10496
if node is None:
10597
return TreeNode(val)
@@ -117,13 +109,11 @@ def __insert_helper(self, node: typing.Optional[TreeNode], val: int) -> TreeNode
117109
return self.__rotate(node)
118110

119111
""" 删除结点 """
120-
121112
def remove(self, val: int):
122113
root = self.__remove_helper(self.root, val)
123114
return root
124115

125116
""" 递归删除结点(辅助函数) """
126-
127117
def __remove_helper(self, node: typing.Optional[TreeNode], val: int) -> typing.Optional[TreeNode]:
128118
if node is None:
129119
return None
@@ -142,7 +132,7 @@ def __remove_helper(self, node: typing.Optional[TreeNode], val: int) -> typing.O
142132
else:
143133
node = child
144134
else: # 子结点数量 = 2 ,则将中序遍历的下个结点删除,并用该结点替换当前结点
145-
temp = self.min_node(node.right)
135+
temp = self.__min_node(node.right)
146136
node.right = self.__remove_helper(node.right, temp.val)
147137
node.val = temp.val
148138
# 更新结点高度
@@ -151,8 +141,7 @@ def __remove_helper(self, node: typing.Optional[TreeNode], val: int) -> typing.O
151141
return self.__rotate(node)
152142

153143
""" 获取最小结点 """
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]:
156145
if node is None:
157146
return None
158147
# 循环访问左子结点,直到叶结点时为最小结点,跳出
@@ -161,7 +150,6 @@ def min_node(self, node: typing.Optional[TreeNode]) -> typing.Optional[TreeNode]
161150
return node
162151

163152
""" 查找结点 """
164-
165153
def search(self, val: int):
166154
cur = self.root
167155
# 循环查找,越过叶结点后跳出
@@ -179,8 +167,8 @@ def search(self, val: int):
179167
return cur
180168

181169

170+
""" Driver Code """
182171
if __name__ == "__main__":
183-
184172
def test_insert(tree: AVLTree, val: int):
185173
tree.insert(val)
186174
print("\n插入结点 {} 后,AVL 树为".format(val))

codes/python/chapter_tree/binary_search_tree.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,12 @@
1212

1313

1414
""" 二叉搜索树 """
15-
16-
1715
class BinarySearchTree:
1816
def __init__(self, nums: typing.List[int]) -> None:
1917
nums.sort()
2018
self.__root = self.build_tree(nums, 0, len(nums) - 1)
2119

2220
""" 构建二叉搜索树 """
23-
2421
def build_tree(self, nums: typing.List[int], start_index: int, end_index: int) -> typing.Optional[TreeNode]:
2522
if start_index > end_index:
2623
return None
@@ -38,7 +35,6 @@ def root(self) -> typing.Optional[TreeNode]:
3835
return self.__root
3936

4037
""" 查找结点 """
41-
4238
def search(self, num: int) -> typing.Optional[TreeNode]:
4339
cur = self.root
4440
# 循环查找,越过叶结点后跳出
@@ -55,7 +51,6 @@ def search(self, num: int) -> typing.Optional[TreeNode]:
5551
return cur
5652

5753
""" 插入结点 """
58-
5954
def insert(self, num: int) -> typing.Optional[TreeNode]:
6055
root = self.root
6156
# 若树为空,直接提前返回
@@ -86,7 +81,6 @@ def insert(self, num: int) -> typing.Optional[TreeNode]:
8681
return node
8782

8883
""" 删除结点 """
89-
9084
def remove(self, num: int) -> typing.Optional[TreeNode]:
9185
root = self.root
9286
# 若树为空,直接提前返回
@@ -132,7 +126,6 @@ def remove(self, num: int) -> typing.Optional[TreeNode]:
132126
return cur
133127

134128
""" 获取最小结点 """
135-
136129
def min(self, root: typing.Optional[TreeNode]) -> typing.Optional[TreeNode]:
137130
if root is None:
138131
return root
@@ -143,6 +136,7 @@ def min(self, root: typing.Optional[TreeNode]) -> typing.Optional[TreeNode]:
143136
return root
144137

145138

139+
""" Driver Code """
146140
if __name__ == "__main__":
147141
# 初始化二叉搜索树
148142
nums = list(range(1, 16))

codes/python/chapter_tree/binary_tree.py

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
n1.right = n3
2424
n2.left = n4
2525
n2.right = n5
26+
print("\n初始化二叉树\n")
2627
print_tree(n1)
2728

2829
# 插入与删除结点
@@ -31,8 +32,10 @@
3132
# 在 n1 -> n2 中间插入节点 P
3233
n1.left = P
3334
P.left = n2
35+
print("\n插入结点 P 后\n")
3436
print_tree(n1)
3537

3638
# 删除结点
3739
n1.left = n2
40+
print("\n删除结点 P 后\n");
3841
print_tree(n1)

codes/python/chapter_tree/binary_tree_bfs.py

-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313

1414
""" 层序遍历 """
15-
16-
1715
def hier_order(root: TreeNode):
1816
# 初始化队列,加入根结点
1917
queue: typing.Deque[TreeNode] = collections.deque()

codes/python/chapter_tree/binary_tree_dfs.py

-6
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616

1717
""" 前序遍历二叉树 """
18-
19-
2018
def pre_order(root: typing.Optional[TreeNode]):
2119
if root is None:
2220
return
@@ -28,8 +26,6 @@ def pre_order(root: typing.Optional[TreeNode]):
2826

2927

3028
""" 中序遍历二叉树 """
31-
32-
3329
def in_order(root: typing.Optional[TreeNode]):
3430
if root is None:
3531
return
@@ -41,8 +37,6 @@ def in_order(root: typing.Optional[TreeNode]):
4137

4238

4339
""" 后序遍历二叉树 """
44-
45-
4640
def post_order(root: typing.Optional[TreeNode]):
4741
if root is None:
4842
return

0 commit comments

Comments
 (0)