Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e7af6b1

Browse files
committed
update
1 parent c5476ff commit e7af6b1

File tree

3 files changed

+143
-41
lines changed

3 files changed

+143
-41
lines changed

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
huawei

‎Data Structures and Algorithms/recursion.py‎

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,51 @@ def factorial(n):
2323
return factorial(n-1) * n
2424

2525
n = 3
26-
print(f'{n}! = {factorial(n)}')
26+
print(f'{n}! = {factorial(n)}\n')
2727

2828
# ####################
2929
# Fibonacci sequence
3030
# ####################
31-
def fib(n):
31+
def fibDP(n): ## downUp
32+
if n < 1: return 0
3233
if n <= 2: return 1
33-
return fib(n-1) + fib(n-2)
34+
dp = [0]*(n+1)
35+
dp[1] = dp[2] = 1
36+
i = 3
37+
while i <= n:
38+
dp[i] = dp[i-1] + dp[i-2]
39+
i += 1
40+
return dp[n]
3441

35-
n = 5
42+
n = 10
43+
print('1, 1, 2, 3, 5, 8, 13 ....')
44+
print(f'第 {n} 位斐波那契数是 {fibDP(n)}')
45+
46+
def fib(n):
47+
if n < 1: return 0
48+
a, b = 0, 1
49+
for _ in range(n):
50+
a, b = b, a+b
51+
return a
52+
n = 10
3653
print('1, 1, 2, 3, 5, 8, 13 ....')
3754
print(f'第 {n} 位斐波那契数是 {fib(n)}')
3855

56+
def fibRecursion(n): ## upDown
57+
def upDown(n):
58+
if n < 1: return 0
59+
if n <= 2:
60+
return 1
61+
if dp[n]: return dp[n]
62+
dp[n] = upDown(n-1) + upDown(n-2)
63+
return dp[n]
64+
dp = [0] * (n+1)
65+
return upDown(n)
66+
n = 10
67+
print('1, 1, 2, 3, 5, 8, 13 ....')
68+
print(f'第 {n} 位斐波那契数是 {fibRecursion(n)}\n')
69+
70+
3971
# ####################
4072
# reverse String
4173
# ####################

‎Data Structures and Algorithms/tree.py‎

Lines changed: 106 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#==================================================
88

99
from typing import List
10-
10+
importcollections
1111
# Definition for a binary tree node.
1212
class TreeNode:
1313
def __init__(self, val=0, left=None, right=None):
@@ -20,16 +20,18 @@ def preorderTraversal(self, root: TreeNode) -> List[int]:
2020
if root is None: return []
2121
stack, res = [root], []
2222
while stack:
23-
tmp = stack.pop()
24-
res.append(tmp.val)
25-
if tmp.right: stack.append(tmp.right)
26-
if tmp.left: stack.append(tmp.left)
23+
node = stack.pop()
24+
res.append(node.val)
25+
if node.right:
26+
stack.append(node.right)
27+
if node.left:
28+
stack.append(node.left)
2729
return res
2830

2931
def preorderTraversalRecursion(self, root: TreeNode) -> List[int]:
3032
def preorder(root):
31-
if not root: return []
32-
res.append(root.val)
33+
if not root: return
34+
res.append(root.val)## 前序
3335
preorder(root.left)
3436
preorder(root.right)
3537
return res
@@ -44,16 +46,16 @@ def inorderTraversal(self, root: TreeNode) -> List[int]:
4446
while cur:
4547
stack.append(cur)
4648
cur = cur.left
47-
tmp = stack.pop()
48-
res.append(tmp.val)
49-
cur = tmp.right
49+
node = stack.pop()
50+
res.append(node.val)
51+
cur = node.right
5052
return res
5153

5254
def inorderTraversalRecursion(self, root: TreeNode) -> List[int]:
5355
def inorder(root):
54-
if not root: return []
56+
if not root: return
5557
inorder(root.left)
56-
res.append(root.val)
58+
res.append(root.val)## 中序
5759
inorder(root.right)
5860
return res
5961
res = []
@@ -69,41 +71,100 @@ def postorderTraversal(self, root: TreeNode) -> List[int]:
6971
res.append(node.val)
7072
else:
7173
stack.append((1, node))
72-
if node.right: stack.append((0, node.right))
73-
if node.left: stack.append((0, node.left))
74+
if node.right:
75+
stack.append((0, node.right))
76+
if node.left:
77+
stack.append((0, node.left))
7478
return res
7579

7680
def postorderTraversalRecursion(self, root: TreeNode) -> List[int]:
7781
def postorder(root):
78-
if not root: return []
82+
if not root: return
7983
postorder(root.left)
8084
postorder(root.right)
81-
res.append(root.val)
85+
res.append(root.val)## 后序
8286
return res
8387
res = []
8488
postorder(root)
8589
return res
8690

87-
def levelOrder(self, root: TreeNode) -> List[List[int]]:
91+
def levelTraversalLeft(self, root: TreeNode) -> List[List[int]]:
92+
if not root: return []
93+
res, queue = [], collections.deque()
94+
queue.append(root)
95+
while queue:
96+
n, level = len(queue), []
97+
for _ in range(n):
98+
node = queue.popleft()
99+
level.append(node.val)
100+
if node.left:
101+
queue.append(node.left)
102+
if node.right:
103+
queue.append(node.right)
104+
res.append(level)
105+
return res
106+
107+
def levelTraversalRight(self, root: TreeNode) -> List[List[int]]:
88108
if not root: return []
89-
res, q = [], [root]
90-
whileq:
91-
n=len(q)
92-
level = []
109+
res, queue = [], collections.deque()
110+
queue.append(root)
111+
whilequeue:
112+
n, level =len(queue), []
93113
for _ in range(n):
94-
node = q.pop(0)
114+
node = queue.popleft()
95115
level.append(node.val)
96-
if node.left: q.append(node.left)
97-
if node.right: q.append(node.right)
116+
if node.right:
117+
queue.append(node.right)
118+
if node.left:
119+
queue.append(node.left)
98120
res.append(level)
99121
return res
100122

123+
def levelTraversal(self, root: TreeNode, k=-1) -> List[List[int]]:
124+
if not root: return []
125+
res, queue = [], collections.deque()
126+
queue.append(root)
127+
while queue:
128+
n, level = len(queue), collections.deque()
129+
for _ in range(n):
130+
node = queue.popleft()
131+
if k == -1: ## 左 --> 右
132+
level.append(node.val)
133+
else: ## 右 --> 左
134+
level.appendleft(node.val)
135+
if node.left:
136+
queue.append(node.left)
137+
if node.right:
138+
queue.append(node.right)
139+
res.append(list(level))
140+
return res
141+
142+
def levelTraversalJagged(self, root: TreeNode, k=-1) -> List[List[int]]:
143+
if not root: return []
144+
res, queue = [], collections.deque()
145+
queue.append(root)
146+
while queue:
147+
n, level = len(queue), collections.deque()
148+
k *= -1
149+
for _ in range(n):
150+
node = queue.popleft()
151+
if k == -1: ## 左 --> 右
152+
level.append(node.val)
153+
else: ## 右 --> 左
154+
level.appendleft(node.val)
155+
if node.left:
156+
queue.append(node.left)
157+
if node.right:
158+
queue.append(node.right)
159+
res.append(list(level))
160+
return res
161+
101162
def maxDepth(self, root: TreeNode) -> int:
102163
def bottomUp(root):
103164
return 0 if not root else max(bottomUp(root.left), bottomUp(root.right)) + 1
104-
def topDown(root, depth):
165+
def topDown(root, depth=0):
105166
return depth if not root else max(topDown(root.left, depth+1), topDown(root.right, depth+1))
106-
return topDown(root, 0), bottomUp(root)
167+
return topDown(root), bottomUp(root)
107168

108169
mat = Solution()
109170
## 前序
@@ -115,6 +176,7 @@ def topDown(root, depth):
115176

116177
root.right = TreeNode(5)
117178
root.right.left = TreeNode(6)
179+
118180
print("\n前序输出:")
119181
print(mat.preorderTraversal(root))
120182
print(mat.preorderTraversalRecursion(root))
@@ -133,19 +195,19 @@ def topDown(root, depth):
133195
print(mat.inorderTraversalRecursion(root))
134196

135197
## 后序
136-
root = TreeNode(6)
198+
# root = TreeNode(6)
137199

138-
root.left = TreeNode(3)
139-
root.left.left = TreeNode(1)
140-
root.left.right = TreeNode(2)
200+
# root.left = TreeNode(3)
201+
# root.left.left = TreeNode(1)
202+
# root.left.right = TreeNode(2)
141203

142-
root.right = TreeNode(5)
143-
root.right.left = TreeNode(4)
144-
print("\n后序输出:")
145-
print(mat.postorderTraversal(root))
146-
print(mat.postorderTraversalRecursion(root))
204+
# root.right = TreeNode(5)
205+
# root.right.left = TreeNode(4)
206+
# print("\n后序输出:")
207+
# print(mat.postorderTraversal(root))
208+
# print(mat.postorderTraversalRecursion(root))
147209

148-
## 层序
210+
# ## 层序
149211
root = TreeNode(1)
150212

151213
root.left = TreeNode(2)
@@ -155,7 +217,14 @@ def topDown(root, depth):
155217
root.right = TreeNode(3)
156218
root.right.left = TreeNode(6)
157219
print("\n层序输出:")
158-
print(mat.levelOrder(root))
220+
print(mat.levelTraversalLeft(root))
221+
print(mat.levelTraversalRight(root))
222+
223+
print(mat.levelTraversal(root))
224+
print(mat.levelTraversal(root, 1))
225+
226+
print(mat.levelTraversalJagged(root))
227+
print(mat.levelTraversalJagged(root, 1))
159228

160229
print('\n最大树深度:')
161230
mat.maxDepth(root)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /