LeetCode每日一题——513. 找树左下角的值

简介: 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

题目

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例

示例 1:

2345_image_file_copy_12.jpg

输入: root = [2,1,3]

输出: 1

示例 2:

2345_image_file_copy_13.jpg

输入: [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
目录
相关文章
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
34 4
|
1月前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
17 3
|
4月前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
49 7
|
4月前
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
41 1
|
4月前
|
算法 C语言 C++
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(上)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
30 1
|
4月前
LeetCode———100——相同的树
LeetCode———100——相同的树
|
4月前
力扣337.打家劫舍3(树形dp)
力扣337.打家劫舍3(树形dp)
|
3月前
|
SQL 算法 数据可视化
LeetCode题目99:图解中叙遍历、Morris遍历实现恢复二叉树搜索树【python】
LeetCode题目99:图解中叙遍历、Morris遍历实现恢复二叉树搜索树【python】
|
3月前
|
存储 SQL 算法
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
|
3月前
|
存储 算法 数据可视化
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
python多种算法对比图解实现 验证二叉树搜索树【力扣98】