亚马逊面试真题:二叉树的层次遍历

描述:
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

首个数据为根节点,后面接着是其左儿子和右儿子节点值,
"#"表示不存在该子节点。
节点数量不超过20。

在线测评地址

样例 1:

输入:
tree = {1,2,3}
输出:
[[1],[2,3]]

解释:
1
/ \
2 3
它将被序列化为{1,2,3}
样例 2:

输入:
tree = {1,#,2,3} 
输出:
[[1],[2],[3]] 

解释:

1 
 \ 
  2 
 / 
3 

它将被序列化为{1,#,2,3}
挑战
挑战1:只使用一个队列去实现它
挑战2:用BFS算法来做

源代码:
用一个队列的方法。

from collections import deque

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""

class Solution:
    """
    @param root: The root of binary tree.
    @return: Level order a list of lists of integer
    """
    def levelOrder(self, root):
        if root is None:
            return []
            
        queue = deque([root])
        result = []
        while queue:
            level = []
            for _ in range(len(queue)):
                node = queue.popleft()
                level.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            result.append(level)
        return result

更多题解参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值