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 e7d4c4d

Browse files
author
hj.tian
committed
feat: add LeetCode75 day21 - day22
add LeetCode75 day21 - day22
1 parent cab17b8 commit e7d4c4d

File tree

6 files changed

+122
-27
lines changed

6 files changed

+122
-27
lines changed

‎leetcode75/day21_110.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import Optional
2+
from helper import create_binary_tree, TreeNode
3+
4+
5+
class Solution:
6+
def isBalanced(self, root: Optional[TreeNode]) -> bool:
7+
if root is None:
8+
return True
9+
left_height = self.height(root.left)
10+
right_height = self.height(root.right)
11+
return abs(left_height - right_height) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right)
12+
13+
def height(self, root: Optional[TreeNode]) -> int:
14+
if root is None:
15+
return 0
16+
return max(self.height(root.left), self.height(root.right)) + 1
17+
18+
19+
if __name__ == "__main__":
20+
root = create_binary_tree([3, 9, 20, None, None, 15, 7], index=0)
21+
assert Solution().isBalanced(root) is True
22+
23+
root = create_binary_tree([1, 2, 2, 3, 3, None, None, 4, 4, None, None, None, None], index=0)
24+
assert Solution().isBalanced(root) is False
25+
26+
root = create_binary_tree([], index=0)
27+
assert Solution().isBalanced(root) is True

‎leetcode75/day21_226.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from typing import Optional
2+
from helper import create_binary_tree, TreeNode, bfs_binary_tree
3+
4+
5+
class Solution:
6+
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
7+
if root is None or (root.left is None and root.right is None):
8+
return root
9+
root.left, root.right = root.right, root.left
10+
self.invertTree(root.left)
11+
self.invertTree(root.right)
12+
return root
13+
14+
15+
if __name__ == "__main__":
16+
root = create_binary_tree([4, 2, 7, 1, 3, 6, 9], index=0)
17+
assert bfs_binary_tree(Solution().invertTree(root)) == [4, 7, 2, 9, 6, 3, 1]
18+
19+
root = create_binary_tree([2, 1, 3], index=0)
20+
assert bfs_binary_tree(Solution().invertTree(root)) == [2, 3, 1]
21+
22+
root = create_binary_tree([], index=0)
23+
assert bfs_binary_tree(Solution().invertTree(root)) == []

‎leetcode75/day22_543.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from typing import Optional
2+
from helper import create_binary_tree, TreeNode
3+
4+
5+
class Solution:
6+
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
7+
if root is None:
8+
return 0
9+
return max(
10+
self.height(root.left) + self.height(root.right),
11+
self.diameterOfBinaryTree(root.left),
12+
self.diameterOfBinaryTree(root.right),
13+
)
14+
15+
def height(self, root: Optional[TreeNode]) -> int:
16+
if root is None:
17+
return 0
18+
return max(self.height(root.left), self.height(root.right)) + 1
19+
20+
21+
if __name__ == "__main__":
22+
root = create_binary_tree([1, 2, 3, 4, 5, None, None], index=0)
23+
assert Solution().diameterOfBinaryTree(root) == 3

‎leetcode75/helper.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def __init__(self, val):
7373
self.right: Optional[TreeNode] = None
7474

7575

76-
def create_binary_tree(nums: List[int], index: int) -> Optional[TreeNode]:
76+
def create_binary_tree(nums: List[Optional[int]], index: int) -> Optional[TreeNode]:
7777
"""
7878
1
7979
2 2
@@ -87,3 +87,25 @@ def create_binary_tree(nums: List[int], index: int) -> Optional[TreeNode]:
8787
root.left = create_binary_tree(nums, index * 2 + 1)
8888
root.right = create_binary_tree(nums, index * 2 + 2)
8989
return root
90+
91+
92+
def bfs_binary_tree(root: Optional[TreeNode]) -> List[int]:
93+
# 层序遍历
94+
if root is None:
95+
return []
96+
queue = [root]
97+
results = []
98+
while queue:
99+
size = len(queue)
100+
nums = []
101+
next_queue = []
102+
for index in range(size):
103+
node = queue[index]
104+
nums.append(node.val if node else None)
105+
if node:
106+
next_queue.append(node.left)
107+
next_queue.append(node.right)
108+
if any(num is not None for num in nums):
109+
results.extend(nums)
110+
queue = next_queue
111+
return results

‎sword-means-offer/helper.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,25 @@ def create_binary_tree(nums: List[int], index: int) -> Optional[TreeNode]:
8787
root.left = create_binary_tree(nums, index * 2 + 1)
8888
root.right = create_binary_tree(nums, index * 2 + 2)
8989
return root
90+
91+
92+
def bfs_binary_tree(root: Optional[TreeNode]) -> List[int]:
93+
# 层序遍历
94+
if root is None:
95+
return []
96+
queue = [root]
97+
results = []
98+
while queue:
99+
size = len(queue)
100+
nums = []
101+
next_queue = []
102+
for index in range(size):
103+
node = queue[index]
104+
nums.append(node.val if node else None)
105+
if node:
106+
next_queue.append(node.left)
107+
next_queue.append(node.right)
108+
if any(num is not None for num in nums):
109+
results.extend(nums)
110+
queue = next_queue
111+
return results

‎sword-means-offer/offer_07.py

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,5 @@
11
from typing import List
2-
from helper import TreeNode
3-
4-
5-
def bfs(root: TreeNode) -> list:
6-
# 层序遍历
7-
if root is None:
8-
return []
9-
queue = [root]
10-
results = []
11-
while queue:
12-
size = len(queue)
13-
nums = []
14-
next_queue = []
15-
for index in range(size):
16-
node = queue[index]
17-
nums.append(node.val if node else None)
18-
if node:
19-
next_queue.append(node.left)
20-
next_queue.append(node.right)
21-
if any(num is not None for num in nums):
22-
results.extend(nums)
23-
queue = next_queue
24-
return results
2+
from helper import TreeNode, bfs_binary_tree
253

264

275
def preorder(root: TreeNode, nums) -> None:
@@ -108,10 +86,10 @@ def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
10886

10987
assert nums == [9, 15, 7, 20, 3]
11088

111-
assert bfs(root) == [3, 9, 20, None, None, 15, 7]
89+
assert bfs_binary_tree(root) == [3, 9, 20, None, None, 15, 7]
11290

11391
root = s.buildTree([-1], [-1])
114-
assert bfs(root) == [-1]
92+
assert bfs_binary_tree(root) == [-1]
11593

11694
root = s.buildTree([], [])
117-
assert bfs(root) == []
95+
assert bfs_binary_tree(root) == []

0 commit comments

Comments
(0)

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