LeetCode 102 二叉树的层次遍历

116 阅读1分钟

题目如下:

解题:使用队列

步骤(例题中):

1、将 根节点(3)得左右节点值 9、20 组合为一个数组 (【9,20】)

2、将节点(9)得左右节点值组合为一个数组(【null,null】)

3、将节点(20)得左右节点值组合为一个数组 (【15,7】)

咱们可以这样想:

将二叉树转换为目标数组:【3,9,20,null,null,15,7】

起始数组:start = []

将3加入 stat([3]),然后判断3得左右节点是否存在,存在则将左右节点加入 start,否则不做操作,这样可以过滤空节点。

start = [3]

start = [3,9,20]

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

上述操作便遍历了每一层节点得值,然而我们需要将每一层得节点值组合为一个数组,使用t1 来存储每一层得值

t1 = [3] --> [3]

t2 = [9,20] --> [t1,9,20]

t3 = [15,7] --> [t2,15,7]

可以清晰得看到一个规律(根节点除外),每次我们得目标值数组 tn = start - t(n-1)

这就很自然得想到了使用队列进行操作,每次将t[n-1]出队即可 出队得范围使用for 进行限制即可。

class Solution:

def levelOrder(self, root: TreeNode) -> List[List[int]]:
    if not root:
        return []
    
    start = [root]
    req = [] //返回结果
    
    while start:
        t1 = []  //存放当前层所有节点值,所以每次需要先置为空
        leng = len(start) //每一层节点得个数
        for i in range(leng): // 将t(n-1)出队
            node = start.pop(0) 
            t1.append(node.val)
            //如果左右节点存在,则添加到队列中
            if node.left:
                start.append(node.left)
            if node.right:
                start.append(node.right)
        if t1:
            req.append(t1)
    return req