题目
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
提示:
二叉树的节点个数的范围是 [1,104]
-231 <= Node.val <= 231 - 1
思路
本题可以采用深度优先搜索或者宽度优先搜索,这里使用的是宽度优先搜索。解决本题需要注意两个临界条件:
1.最底层:想一想,什么情况才能确定是最底层呢??当然是遍历一层节点时,判断所有节点都没有子节点的时候,该层就是最后一层了
2.最左侧:就是每层的第一个节点
解决好这俩临界条件再配合队列实现BFS就很好实现了。
题解
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right from collections import deque class Solution: def findBottomLeftValue(self, root: Optional[TreeNode]) -> int: temp = deque() temp.append(root) while temp: n = len(temp) # first为每层第一个节点,judge判断每层是否有子节点 first, judge = None, True for i in range(n): index = temp.popleft() # 找到首节点 if i == 0: first = index if index.left is not None: # 有子节点 judge = False temp.append(index.left) if index.right is not None: # 有子节点 judge = False temp.append(index.right) # 检验每层是否有子节点,如果没有直接返回第一个节点即可 if judge: return first.val