给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
输入: 2 / \ 1 3 输出: 1
注意: 您可以假设树(即给定的根节点)不为 NULL。
广度优先搜索BFS的应用
class Solution:
def findBottomLeftValue(self, root: TreeNode) -> int:
res = []
res.append(root)
while res:
length = len(res)
for i in range(length):
node = res.pop(0)
if i == 0: # 每次都弹出左边的结点,i = 0说明是每一层最左边的结点,更新下来
left = node.val
if node.left:
res.append(node.left) # 左侧结点进队列
if node.right:
res.append(node.right) # 右侧结点进队列
return left
写这道题我才发现,对于list的pop()操作,如果只写list.pop()的话默认是list.pop(-1),是按照堆栈的结构弹出,后进先出。
对于这道题的时候,最开始想不出来怎么把最后一行的最左边的元素保留出来,结合pop(0)操作,每一行当i=0时其实就是该行的最左边元素。