说在前面
🎈每天进行一道算法题目练习,今天的题目是“找树左下角的值”,一起来复习一下树的遍历吧。
问题描述
给定一个二叉树的 根节点 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。