144. 二叉树的前序遍历
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def dfs(node):
if node is None:
return None
result.append(node.val)
dfs(node.left)
dfs(node.right)
dfs(root)
return result
145. 二叉树的后序遍历
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def dfs(node):
if node is None:
return None
dfs(node.left)
dfs(node.right)
result.append(node.val)
dfs(root)
return result
94. 二叉树的中序遍历
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def dfs(node):
if node is None:
return None
dfs(node.left)
result.append(node.val)
dfs(node.right)
dfs(root)
return result
102. 二叉树的层序遍历
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
queue = [root]
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.pop(0)
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(level)
return result
107. 二叉树的层序遍历 II
class Solution:
def levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
queue = [root]
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.pop(0)
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(level)
return result[::-1]
199. 二叉树的右视图
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
queue = [root]
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.pop(0)
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(level[-1])
return result
637. 二叉树的层平均值
class Solution:
def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]:
if not root:
return []
queue = [root]
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.pop(0)
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(sum(level)/len(level))
return result
429. N 叉树的层序遍历
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
if not root:
return []
queue = deque([root])
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.popleft()
level.append(cur.val)
if cur.children:
for child in cur.children:
queue.append(child)
result.append(level)
return result
515. 在每个树行中找最大值
class Solution:
def largestValues(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
queue = deque([root])
result = []
while queue:
level = []
for _ in range(len(queue)):
cur = queue.popleft()
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(max(level))
return result
116. 填充每个节点的下一个右侧节点指针
class Solution:
def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
if not root:
return None
queue = deque([root])
while queue:
level = []
for _ in range(len(queue)):
cur = queue.popleft()
level.append(cur)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
for i in range(len(level) - 1):
level[i].next = level[i + 1]
if level:
level[-1].next = None
return root
104. 二叉树的最大深度
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
queue = deque([root])
cnt = 0
while (queue):
for _ in range(len(queue)):
cur = queue.popleft()
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
cnt += 1
return cnt
111. 二叉树的最小深度
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
queue = deque([root])
cnt = 0
while (queue):
cnt += 1
for _ in range(len(queue)):
cur = queue.popleft()
if (not cur.left) and (not cur.right):
return cnt
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return cnt
唯一需要注意的是统计层数时进入下一层while(queue)后就要计数加一
1770

被折叠的 条评论
为什么被折叠?



