
思路:维护一个deque,首先把节点入队,然后从队头pop出来node,将node的val存入当层的数组中,如果node的左子树在,就左子树入队,如果node的右子树在,就右子树入队。小循环结束后要把当层的val数组清空,当队空时跳出循环。
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans = []
q = deque([root])
vals = []
while q:
vals = [] #小循环结束后清空vals
for _ in range(len(q)):
node = q.popleft() #先拿到该值
vals.append(node.val)
if node.left : q.append(node.left)
if node.right : q.append(node.right)
ans.append(vals)
return ans

思路:在偶数层反转答案就行。
class Solution:
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans = []
q = deque([root])
i = 1
while q:
vals = []
l = len(q)
for _ in range(l):
node = q.popleft()
vals.append(node.val)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
if i % 2:
ans.append(vals)
else: ans.append(vals[::-1])
i += 1
return ans

思路一:层序遍历,然后返回ans[-1][0]
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
q = deque([root])
ans = []
while q:
vals = []
for _ in range(len(q)):
node = q.popleft()
vals.append(node.val)
if node.left: q.append(node.left)
if node.right:q.append(node.right)
ans.append(vals)
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

思路:层序遍历,每层将ans+1
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
ans = 0
if root is None:
return 0
q = deque([root])
while q:
for _ in range(len(q)):
node = q.popleft()
if node.left:q.append(node.left)
if node.right:q.append(node.right)
ans += 1
return ans

思路:层序遍历二叉树,第一次遇到某个节点没有左右子树的时候,就return出当前节点的层数。
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
ans = 1
if root is None:
return 0
q = deque([root])
while q:
for _ in range(len(q)):
node = q.popleft()
if node.left:q.append(node.left)
if node.right:q.append(node.right)
if not node.left and not node.right:
return ans
ans += 1

思路:返回层序遍历每一层的最后一个值。
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
ans = []
if root is None:
return []
q = deque([root])
while q:
vals = []
for _ in range(len(q)):
node = q.popleft()
if node.left:q.append(node.left)
if node.right:q.append(node.right)
vals.append(node.val)
ans.append(vals[-1])
return ans
文章介绍了使用deque进行二叉树的层序遍历,包括普通遍历、锯齿形遍历、寻找底部左侧值、计算最大深度和最小深度,以及获取右侧视图的方法。通过层序遍历,结合不同条件对子节点的处理,实现各种特定的树结构信息提取。
2023

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



