找树左下角的值

135 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

说在前面

🎈每天进行一道算法题目练习,今天的题目是“找树左下角的值”,一起来复习一下树的遍历吧。

问题描述

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

假设二叉树中至少有一个节点。 示例 1:

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

示例 2:

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

提示:

二叉树的节点个数的范围是 [1,10^4]
-2^31 <= Node.val <= 2^31 - 1 

思路分析

首先让我们一起来了解一下题意,题目说的是要我们找出二叉树的最底层最左边节点的值,注意这里的描述,我们需要找的是最底层最左边,最左边的前提条件的做底层,所以首先我们应该要先找到最底层,再找到这一层的最左边。
理解了题目之后是不是觉得好像没有很难?我们可以使用前序遍历来进行解题,记录每次遍历的层级数,层级数增大时则更新结果值,应为是前序遍历,每一层都是先访问到最左边的节点,所以这样得到的结果就是最底层最左边的节点的值,具体步骤如下:

  • 1、初始化结果和层级 将结果变量res初始化为'',当前最大层级floor初始化为-1,每次遍历更新最大层级和结果。
let floor = -1;
let res = '';
  • 2、前序遍历求结果值 当前层级大于最大层级时,更新最大层级数和结果值。
const dfs = function(f,r){
    if(!r) return;
    if(f > floor){
        floor = f;
        res = r.val
    }
    dfs(f+1,r.left);
    dfs(f+1,r.right);
};

AC代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
 var findBottomLeftValue = function(root) {
    let floor = -1;
    let res = '';
    const dfs = function(f,r){
        if(!r) return;
        if(f > floor){
            floor = f;
            res = r.val
        }
        dfs(f+1,r.left);
        dfs(f+1,r.right);
    };
    dfs(0,root);
    return res;
};

说在后面

🎉这里是JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。