513. 找树左下角的值【二叉树】

513. 找树左下角的值

513. 找树左下角的值

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

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

示例 1:

在这里插入图片描述

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

示例 2:

在这里插入图片描述

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

  • 二叉树的节点个数的范围是 [ 1 , 1 0 4 ] [1,10^4] [1,104]
  • − 2 31 < = N o d e . v a l < = 2 31 − 1 -2^{31} <= Node.val <= 2^{31} - 1 231<=Node.val<=2311

解题思路

可以层序遍历,然后拿到最后一层的第一个元素。
也可以递归遍历,拿到最大深度的第一个元素即可。

Go代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func findBottomLeftValue(root *TreeNode) int {
    // 采用前中后序遍历都可以,因为只要能保证左节点比右节点先访问就可以啦
    // 第一次进入最大深度的就是最底层最左边的节点
    if root == nil {
        return 0
    }
    res := 0
    maxDepth := math.MinInt32
    dfs(root,&res,1,&maxDepth) // 根节点认为是第一层
    return res
}

func dfs(root *TreeNode,res *int,depth int,maxDepth *int) {
    if root == nil {
        return 
    }
    // 深度增加了,肯定是初次遍历到某层时深度比最大深度还大了,此时的节点就是当前层的最左节点
    if depth > *maxDepth {
        *res = root.Val
        *maxDepth = depth
    }

    if root.Left != nil {
        depth++
        dfs(root.Left,res,depth,maxDepth)
        depth--
        // 上面三行是故意这么写的,更清楚的看到回溯过程,实际三行可以写成下面一行
        // dfs(root.Left,res,depth+1,maxDepth)
    }

    if root.Right != nil {
        dfs(root.Right,res,depth+1,maxDepth)
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值