Leetcode——二叉树的层次遍历

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

例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:

[
[3],
[9,20],
[15,7]
]
思路:
层次遍历需要借助队列这样一个辅助的数据结构。
1.题目给出从左到右访问节点,自然想到的就是BFS,广度优先搜索。每个节点访问且仅访问一次。所以时间复杂度是O(N),根节点先入队列,然后队列不空,取出头元素,如果左孩子存在就入队列,否则什么都不做,右孩子同理。知道队列为空,则表示树层次遍历结束。
2.深度优先搜索DFS,也可以做。但是最好还是BFS

代码:(BFS)

class Solution:
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if not root:
            return []        #若根节点为空,则返回空列表
        result = []     		#模拟一个队列存储节点
        queue = collections.deque()  #双端队列
        queue.append(root)     #首先将根节点入队
        
        while queue:
            level_size = len(queue)	#记录同层节点的个数
            current_level = []            #使用列表来存储同层节点
            
            for _ in range(level_size):
                node = queue.popleft()			#将同层节点依次出队
                current_level.append(node.val)
                if node.left: queue.append(node.left)		#非空左孩子入队
                if node.right: queue.append(node.right)	#非空右孩子入队
            result.append(current_level)
        return result
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值