【Leetcode_总结】102. 二叉树的层次遍历 - python

Q:

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

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

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

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

链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/

思路:利用队列,由于输出的关系,因此还需要统计一下层数

代码:

class Solution:
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        if root == None:
            return []
        """利用队列实现树的层次遍历"""
        from queue import Queue
        q = Queue()
        q.put((root,0))
        while not q.empty():
            node ,level = q.get()
            if level == len(res):
                res.append([])
            res[level].append(node.val)
            flag = 0
            if node.left != None:
                flag += 1
                q.put((node.left,level+1))
            if node.right != None:
                flag += 1
                q.put((node.right, level + 1))
        return res

另一种解法:也是利用队列的思想,只是统计层数的过程不同

class Solution:
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        que = [root]
        if root == None:
            return res
        while que:
            tempList = []
            for i in range(len(que)):
                node = que.pop(0)
                tempList.append(node.val)
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
            res.append(tempList)
        return res

 

猜你喜欢

转载自blog.csdn.net/maka_uir/article/details/86062671