二叉树层次遍历
例题

# 使用队列
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans=[]
q=deque([root])
while q:
value=[]
l=len(q)
for i in range(l):
node=q.popleft()
value.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
ans.append(value)
return ans

# 使用队列,加一个奇偶层判断
class Solution:
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans=[]
q=deque([root])
even=False
while q:
value=[]
l=len(q)
for i in range(l):
node=q.popleft()
value.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
ans.append(value[::-1] if even else value)
even=not even
return ans

# 可以先层次遍历,返回最后一行的第一个节点的值
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
if root is None:
return []
ans=[]
q=deque([root])
while q:
value=[]
for _ in range(len(q)):
node=q.popleft()
value.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
ans.append(value)
return ans[-1][0]
# 可以从右往左层次遍历,返回最后一个节点的值
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
q = deque([root])
while q:
node = q.popleft()
if node.right: q.append(node.right)
if node.left: q.append(node.left)
return node.val
Comments NOTHING