173.二叉树:找树左下角的值(力扣)

news2024/11/28 14:47:45

代码解决

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */

class Solution {
public:
    // 查找二叉树中最底层最左边的值
    int findBottomLeftValue(TreeNode* root) {
        queue<TreeNode*> que;  // 定义一个队列用于广度优先搜索
        if (root != nullptr) que.push(root);  // 如果根节点不为空,将其加入队列
        
        int result;  // 用于保存最终结果,即最底层最左边的节点值
        
        // 当队列不为空时进行循环
        while (!que.empty()) {
            int size = que.size();  // 获取当前队列的大小
            TreeNode* node;  // 用于存储当前节点
            
            // 遍历当前层的所有节点
            for (int i = 0; i < size; i++) {
                node = que.front();  // 取出队列的头节点
                que.pop();  // 弹出头节点
                
                // 如果是当前层的第一个节点,更新结果
                if (i == 0) result = node->val;
                
                // 如果左子节点存在,将其加入队列
                if (node->left) que.push(node->left);
                
                // 如果右子节点存在,将其加入队列
                if (node->right) que.push(node->right);
            }
        }
        
        return result;  // 返回最底层最左边的节点值
    }
};

findBottomLeftValue 方法

  • 使用广度优先搜索(BFS)来遍历二叉树。
  • 定义一个队列 que 来存储节点,用于层次遍历。
  • 如果根节点不为空,将其加入队列。
  • 初始化 result 用于保存最底层最左边的节点值。
  • 当队列不为空时,进行循环:
    • 获取当前层的节点数量 size
    • 遍历当前层的所有节点:
      • 取出队列的头节点 node 并弹出。
      • 如果是当前层的第一个节点,更新 result
      • 如果左子节点存在,将其加入队列。
      • 如果右子节点存在,将其加入队列。
  • 返回 result,即最底层最左边的节点值。

方法二 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */

class Solution {
public:
    int maxdeep = INT_MIN;  // 用于存储最大的深度
    int result;  // 用于存储最底层最左边的节点值

    // 递归遍历函数,找到最底层最左边的节点
    void traversal(TreeNode* root, int depth) {
        // 如果当前节点是叶子节点
        if (root->left == nullptr && root->right == nullptr) {
            // 更新最大深度和结果
            if (depth > maxdeep) {
                maxdeep = depth;
                result = root->val;
            }
            return;
        }

        // 递归遍历左子树
        if (root->left) {
            traversal(root->left, depth + 1);  // 深度加1
        }

        // 递归遍历右子树
        if (root->right) {
            traversal(root->right, depth + 1);  // 深度加1
        }
    }

    // 主函数,调用递归遍历函数
    int findBottomLeftValue(TreeNode* root) {
        traversal(root, 0);  // 从根节点开始遍历,初始深度为0
        return result;  // 返回最底层最左边的节点值
    }
};
  • 成员变量

    • maxdeep:存储最大深度,初始值为 INT_MIN
    • result:存储最底层最左边的节点值。
  • traversal 方法

    • 递归遍历二叉树,找到最底层最左边的节点。
    • 如果当前节点是叶子节点,检查当前深度是否大于 maxdeep,如果是,更新 maxdeepresult
    • 递归遍历左子树和右子树,深度加1。
  • findBottomLeftValue 方法

    • 主函数,调用 traversal 方法从根节点开始遍历,初始深度为 0。
    • 返回最底层最左边的节点值 result

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1804759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据集(图片)求均值和标准差

数据集&#xff08;图片&#xff09;求均值和标准差 一、环境配置 运行一下命令完成环境配置 pip install opencv-python numpy二、源代码 import os import cv2 import numpy as npdef compute_mean_std(Img_folders):all_file []for images_path in Img_folders:all_file…

攻防世界---misc---What-is-this

1、下载附件&#xff0c;是一个.gz的文件夹&#xff0c;是linux系统的压缩包后缀 2、在kali中解压&#xff0c;解压之后得到两张图片 3、想把图片拖在物理机中分析&#xff0c;但是拖不了&#xff0c;所以将.gz文件在物理机中改为.zip&#xff0c;解压之后看到了一个没有后缀的…

Java从入门到放弃

线程池的主要作用 线程池的设计主要是为了管理线程&#xff0c;为了让用户不需要再关系线程的创建和销毁&#xff0c;只需要使用线程池中的线程即可。 同时线程池的出现也为性能的提升做出了很多贡献&#xff1a; 降低了资源的消耗&#xff1a;不会频繁的创建、销毁线程&…

Windows 10 找不到Microsoft Edge 浏览器

下载链接 了解 Microsoft Edge 手动下载浏览器 问题说明 一般来说&#xff0c;windows10系统应该是自带浏览器edge的&#xff0c;但有的电脑就是没有找到edge浏览器&#xff0c;可能系统是精简过的&#xff0c;可能是被卸载了。如下&#xff0c;控制面板确实没找到程序。 ​ …

端午节前夕送给高考学子的祝福

据中国新闻网消息&#xff1a;6月7日&#xff0c;2024年全国高考正式拉开大幕&#xff0c;全国1342万考生奔赴考场。各地纷纷开启“护考”模式和“静音模式”&#xff0c;为考生们创造良好的学习、考试、休息环境。 明天是2024年端午节&#xff0c;笔者祝愿1342万考生都将获得…

生信软件22 - 测序数据5‘和3‘端reads修剪工具sickle

大多数现代测序技术产生的3 端和5 端质量降低的reads&#xff0c;这两个区域错误地calling base会对组装、下游生物信息学分析造成影响。sickle使用滑动窗口沿着质量和长度阈值&#xff0c;根据质量是否低于阈值来修剪reads的3 端&#xff0c; 根据质量是否超过阈值来修剪reads…

最快的开源UDP传输工具:Kcptun

Kcptun&#xff1a;极速网络隧道&#xff0c;让数据传输飞起来&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 kcptun 是一个轻量级、高性能的TCP/UDP网络加速工具&#xff0c;由xtaci开发并托管在GitHub上。它通过使用kcp协议&#xff0c;为网络数据传输提供了一个快…

Django redirect()函数实现页面重定向

1&#xff0c;通过路由反向解析进行重定向 1.1 添加视图函数 myshop/app2/views.py from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse def index(request):return HttpResponse("app2 的index")# 反向…

QField如何打开工程或数据文件

Field有个文件选择器&#xff0c;允许从本地设备打开工程。如果想从云端打开文件&#xff0c;请参阅 QFieldCloud 。 注意&#xff1a;请注意&#xff0c;卸载QField时&#xff0c;应用程序文件夹将被删除&#xff0c;而更新则不会。 导入并打开本地工程 QField界面 当转到 …

Unity DOTS技术(十五) 物理系统

要解决性能的瓶颈问题,在DOTS中我们将不再使用Unity自带的物理组件. 下面来分享一下在DOTS中当如何使用物理插件. 一.导入插件 在使用DOTS系创建的实体我们会发现,游戏物体无法受物理系统影响进行运动.于是我们需要添加物理系统插件. 1.打开Package Manager > 搜索插件Uni…

【NI国产替代】产线综测仪,高速高精度测量的示波器模块与任意波形发生器模块,多样化 DUT 供电;高精度万用表模块

Xilinx ZYNQ-7000 系列 FPGA 控制模块多样化 DUT 供电&#xff1b;高精度万用表模块高速高精度测量的示波器模块与任意波形发生器模块可选配射频开关与音频信号源和音频分析仪模块可快速部署的测试平台软件&#xff0c;支持测试计划导入、开发、执行管理具有良好的扩展性&#…

1.2-自然语言的分布式表示-基于计数的方法

本篇笔记对应的视频链接为&#xff1a; 3-基于计数的方法表示单词-将文字转换成编号的预处理工作_哔哩哔哩_bilibili&#xff1b;4-基于计数的方法表示单词-使用共现矩阵进行单词的分布式表示_哔哩哔哩_bilibili&#xff1b;5-基于计数的方法表示单词-单词之间相似度计算_哔哩哔…

超详解——python数字和运算_——小白篇

目录 1.的位运算 2. 常用内置函数/模块 math模块&#xff1a; random模块&#xff1a; decimal模块&#xff1a; 3.内置函数&#xff1a; 总结&#xff1a; 1.的位运算 位运算是对整数在内存中的二进制表示进行操作。Python支持以下常见的位运算符&#xff1a; 按位与&…

openh264 场景变化检测算法源码分析

文件位置 openh264/codec/processing/scenechangedetection/SceneChangeDetection.cppopenh264/codec/processing/scenechangedetection/SceneChangeDetection.h 代码流程 说明&#xff1a; 通过代码流程分析&#xff0c;当METHOD_SCENE_CHANGE_DETECTION_SCREEN场景类型为时…

git 的基本操作 Master and branch的版本合并 @ VS 1019

前言&#xff1a; 在VS 2019有git 的可视化管理,但&#xff0c;感觉微软其实就是在git上包了一层。版本冲突后&#xff0c;还是要靠git 的命令行代码搞。本文记录了一次&#xff0c;branch和master的版本合并的过程。作为&#xff0c;后续的参考。 【注意&#xff0c;这个是一…

相机标定中一些细节--畸变模型和参数

张正友标定方法做相机标定的主要过程是先估计每张图片的单应性矩阵&#xff0c;然后通过这一系列的单应性矩阵估计出内外参数初值&#xff0c;最后再考虑畸变模型的加入进行非线性优化。同时优化内参、外参和畸变参使得重投影误差最小。 镜头的畸变表现出来的非线性关系&#…

处理异常不再困难-try-catch-finally和throw语句详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

《软件定义安全》之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退&#xff0c;传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利&#xff0c;以及对降低成本的天然需求&#xff0c;企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…

《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化&#xff0c;从架构上颠覆了原有的网络管理&#xff0c;所以SDN的架构安全就是首先要解决的问题。例如&#xff0c;SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…