题目
给定一个二叉树的 根节点 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
思路
本题可以采用深度优先搜索或者宽度优先搜索,这里使用的是宽度优先搜索。解决本题需要注意两个临界条件:
- 最底层:想一想,什么情况才能确定是最底层呢??当然是遍历一层节点时,判断所有节点都没有子节点的时候,该层就是最后一层了
- 最左侧:就是每层的第一个节点
解决好这俩临界条件再配合队列实现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