【leetcode】513.找树左下角的值

【leetcode】513.找树左下角的值


在这里插入图片描述

题目

leetcode原题链接

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

示例 1:
image-20220426104059772
输入: root = [2,1,3]
输出: 1

示例 2:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LRTc6ppa-1650942702494)(C:/Users/PencilX/AppData/Roaming/Typora/typora-user-images/image-20220426104108381.png)]
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:
二叉树的节点个数的范围是 [1,104]
-231 <= Node.val <= 231 - 1

思路

在这里插入图片描述
找最底层的节点,也就是找深度最大的节点。找最左边的节点,可以使用前序遍历,这样优先遍历左节点。

遇到叶子节点,我们就把它的深度与原来的得到的值对应的深度比较一下,如果这个叶子节点的深度比原来的深度大,那就更新深度和值。

  • 递归函数参数是树的节点,没有返回值。
  • 遇到空节点时就直接返回
  • 单层递归逻辑,分为两种情况:
    • 左节点存在时,判断其是否为叶子节点,是的话判断深度是否满足更新条件
    • 左节点不存在时,这时候才有必要判断右节点是否为叶子节点,是的话判断其深度是否满足更新条件

代码

在这里插入图片描述

var findBottomLeftValue = function(root) {
    let res = [1 , root.val]    //res[0]记录深度,res[1]记录值
    let depth = 0

    function traversal(node){
        if(!node) return 
        depth++
        if(node.left){
            if(!node.left.left && !node.left.right && depth + 1 > res[0]){
                res[0] = depth + 1
                res[1] = node.left.val
            }
        }else if(node.right){
            if(!node.right.left && !node.right.right && depth + 1 > res[0]){
                res[0] = depth + 1
                res[1] = node.right.val
            }
        }
        traversal(node.left)
        traversal(node.right)
        depth-- //记得单层递归回退要把深度回退
    }

    traversal(root)
    return res[1]
};

关注我的专栏,每天更新三道leetcode题解,一起变强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端corner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值