剑指Offer|LCR 045.找树左下角的值

LCR 045.找树左下角的值

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

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

示例 1:

复制代码
输入: root = [2,1,3]
输出: 1

示例 2:

复制代码
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

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

法1:

分析:

定义两个队列queue1和queue2,默认将root加入queue1,令result默认为root.val。

如果queue1不为空,则遍历:

  • 将首元素出队列queue1,并将当前节点的左右孩子入队列(获取下层的节点);
  • 当queue1的长度为0 的时候,表明当前层次的节点都遍历结束,更新一下queue1为下一层次节点,queue2初始为空,判断queue1是否大于0 ,有节点的话需要更新一下result。
js 复制代码
 var findBottomLeftValue = function(root) {
    let queue1 = []; 
    let queue2 = []; 
    queue1.push(root);
    let result = root.val;

    while(queue1.length > 0){
        let node = queue1.shift(); // 移除第一个元素
        // 如果有左子节点,加入队列2
        if(node.left !== null){
            queue2.push(node.left);
        }

        if(node.right !== null){
            queue2.push(node.right);
        }

        // 如果当前队列为空,表示当前层已处理完毕
        if(queue1.length === 0){
            // 当前层处理完后,交换队列
            queue1 = queue2;
            queue2 = [];

            // 如果 queue1不为空,更新最左节点的值为当前队列的第一个节点
            if(queue1.length > 0){
                result = queue1[0].val;
            }
        }
    }
	return result;
};
相关推荐
budingxiaomoli6 分钟前
分治算法-快排
数据结构·算法
云泽80817 分钟前
C++ STL 栈与队列完全指南:从容器使用到算法实现
开发语言·c++·算法
郑州光合科技余经理30 分钟前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
Yanni4Night39 分钟前
JavaScript打包器大奖赛:谁是构建速度之王? 🚀
前端·javascript
SakuraOnTheWay1 小时前
解构 JavaScript 迭代器:一行代码引发的性能思考
javascript·性能优化
默海笑1 小时前
VUE后台管理系统:项目架构之搭建Layout架构解决方案与实现
前端·javascript·vue.js
csdn_aspnet1 小时前
C# 电子签名及文档存储
javascript·c#
前端小白在前进1 小时前
力扣刷题:复原IP地址
tcp/ip·算法·leetcode
yaoh.wang1 小时前
力扣(LeetCode) 94: 二叉树的中序遍历 - 解法思路
python·算法·leetcode·面试·职场和发展·二叉树·跳槽
Evand J1 小时前
【课题推荐】基于视觉(像素坐标)与 IMU 的目标/自身运动估计(Visual-Inertial Odometry, VIO),课题介绍与算法示例
人工智能·算法·计算机视觉