102. 二叉树的层次遍历

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

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

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

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

思路:

  • 根节点为空时,返回[]
  • 每层的树节点值存在一个list中,所以需要注意处理每层最右侧的树节点
  • current_layer_last指向当前层的最右节点,next_layer_last指向下一层最右节点
  • 从队列中pop出节点时,检查左右子节点,如果非空则push到队列中,并且更新下一层最右节点;当pop的节点是当前层最右的节点时,即将存放当前层的所有节点值的list添加到结果中
  • 当前层最右节点pop出队列时,在之前加入队列的节点便是下一层的最右节点
# 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):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        
        if root == None:
            return []
        
        
        result, temp, queue = [], [], []
        
        queue.append(root)
        
        current_layer_last = root
        next_layer_last = root
        
        while len(queue) > 0:
            curr_node = queue.pop(0)
            temp.append(curr_node.val)
            
            if curr_node.left != None:
                queue.append(curr_node.left)
                next_layer_last = curr_node.left
                
            if curr_node.right != None:
                queue.append(curr_node.right)
                next_layer_last = curr_node.right
                
            if curr_node == current_layer_last:
                current_layer_last = next_layer_last
                result.append(temp)
                temp = []

        return result
posted @ 2018-09-15 15:30  yuyin  阅读(87)  评论(0)    收藏  举报