2022跟着leedcode学数据结构--第37天

112 阅读1分钟

「这是我参与2022首次更文挑战的第37天,活动详情查看:2022首次更文挑战

[剑指 Offer 32 - II. 从上到下打印二叉树 II]

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:

image.png

给定二叉树: [3,9,20,null,null,15,7],

返回其层次遍历结果:

[ [3], [9,20], [15,7] ]

提示:

节点总数 <= 1000

解题思路:

  • 这个题和昨天的做的很像,都是套用的二叉树的 广度优先遍历 的方法
  • 碰到这样的题先判断是否存在root 不存在直接返回
  • 使用辅助参数 arr =[root] 遍历递归获取每一层的参数
  • 将每一层参数都写入结果集中,最后得到res就是我们想要的结果
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: 
            return []
        arr = [root]
        res = []
        while arr:
            n = len(arr)
            tmp = []
            for row in range(n):
                if not arr: 
                    break
                ans = arr.pop(0)
                tmp.append(ans.val)
                if node.left:             
                    arr.append(ans.left)
                if node.right:
                    arr.append(ans.right)
            res.append(tmp)
        return res

执行结果:

image.png

[剑指 Offer 32 - III. 从上到下打印二叉树 III]

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

例如: 给定二叉树: [3,9,20,null,null,15,7],

image.png

返回其层次遍历结果:

[ [3], [20,9], [15,7] ]  

提示:

节点总数 <= 1000

解题思路:

- 这个题和上面的题机会一模一样,唯一不同的地方需要根据奇偶将列表进行翻转
- 这里用了一个辅助参数m 每次循环进行+1操作,然后通过m%2取余的方法进行判断是奇偶。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: 
            return []
        arr = [root]
        res = []
        m=1
        while arr:
            n = len(arr)
            tmp = []
            for _ in range(n):
                if not arr: 
                    break
                ans = arr.pop(0)
                tmp.append(ans.val)
                if ans.left:             
                    arr.append(ans.left)
                if node.right:
                    arr.append(ans.right)
            if m%2 == 0:
                res.append(tmp[::-1])
            else:
                res.append(tmp)
            m+=1
        return res

执行结果:

image.png