找树左下角的值

力扣题目链接(opens new window)

给定一个二叉树,在树的最后一行找到最左边的值。

示例 1:

示例 2:

思路

层序遍历

这个是很自然的思路,因为层序遍历可以避免对于“最底层”这个要求的繁琐判定

在层序遍历的过程中,我们只需要保存最后一层的结果即可

代码

和标准的层序遍历写法一样

class Solution {
public:
//层序遍历
int findBottomLeftValue(TreeNode* root) {
//定义队列
queue<TreeNode*> que;
if(root != NULL) que.push(root);//判定根节点
int res;
while(!que.empty()){//遍历队列
int size = que.size();//记录队列长度
for(int i = 0; i < size; ++i){
TreeNode* node = que.front();
que.pop();
//判断,如果到了最后一层,那么就保存该节点的值
if(i == 0) res = node->val; if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
}
return res;
}
};
递归法

这里使用递归法的话没有层序遍历那么直观,但是因为其涉及到了递归法求深度的概念以及对于回溯的应用,所以还是记录一下

三部曲

1、确定递归函数的参数和返回值

传入参数是根节点,另需要一个变量记录深度的更新值

void traversal(TreeNode* node, int deep){

}

2、确定终止条件

因为我们是靠递归遍历来不断获取深度的

因此当遇到叶子节点时就要更新当前的深度信息

int maxDeep = INT_MIN;
int res; void traversal(TreeNode* node, int deep){
if(node->left == NULL && node->right == NULL){
if(deep > maxDeep){
maxDeep = deep;//更新深度
//记录当前叶子节点值
res = node->val;
}
return;
}
}

3、确定单层逻辑

使用前序遍历即可,这里依旧要使用回溯

int maxDeep = INT_MIN;
int res; void traversal(TreeNode* node, int deep){
if(node->left == NULL && node->right == NULL){
if(deep > maxDeep){
maxDeep = deep;//更新深度
//记录当前叶子节点值
res = node->val;
}
return;
} if(node->left){
//记录深度
deep++;
traversal(node, deep);
//回溯,深度减1
deep--;
}
if(node->right){
//记录深度
deep++;
traversal(node, deep);
//回溯,深度减1
deep--;
}
return;
}

这里使用回溯的主要目的是为了让每个分支都能被遍历到,进而确认每个叶子节点,获取最底层的那个

代码
class Solution {
public:
//递归
//确定递归函数的参数和返回值
int maxDeep = INT_MIN;
int res; void traversal(TreeNode* node, int deep){
if(node->left == NULL && node->right == NULL){
if(deep > maxDeep){
maxDeep = deep;//更新深度
//记录当前叶子节点值
res = node->val;
}
return;
} if(node->left){
//记录深度
deep++;
traversal(node->left, deep);
//回溯,深度减1
deep--;
}
if(node->right){
//记录深度
deep++;
traversal(node->right, deep);
//回溯,深度减1
deep--;
}
return;
} int findBottomLeftValue(TreeNode* root) {
int deep = 0;
traversal(root, deep);
return res;
}
};

【LeetCode二叉树#08】寻找树左下角的值(回溯机制X深度)的更多相关文章

  1. 代码随想录算法训练营day18 | leetcode 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树

    LeetCode 513.找树左下角的值 分析1.0 二叉树的 最底层 最左边 节点的值,层序遍历获取最后一层首个节点值,记录每一层的首个节点,当没有下一层时,返回这个节点 class Solutio ...

  2. Leetcode之深度优先搜索(DFS)专题-513. 找树左下角的值(Find Bottom Left Tree Value)

    Leetcode之深度优先搜索(DFS)专题-513. 找树左下角的值(Find Bottom Left Tree Value) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,在树的最后一行找到最 ...

  3. LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)

    513. 找树左下角的值 513. Find Bottom Left Tree Value 题目描述 给定一个二叉树,在树的最后一行找到最左边的值. LeetCode513. Find Bottom ...

  4. Java实现 LeetCode 513 找树左下角的值

    513. 找树左下角的值 给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输 ...

  5. 领扣(LeetCode)找树左下角的值 个人题解

    给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假 ...

  6. [Swift]LeetCode513. 找树左下角的值 | Find Bottom Left Tree Value

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

  7. 513 Find Bottom Left Tree Value 找树左下角的值

    给定一个二叉树,在树的最后一行找到最左边的值. 详见:https://leetcode.com/problems/find-bottom-left-tree-value/description/ C+ ...

  8. Leetcode513. Find Bottom Left Tree Value找树左下角的值

    给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假 ...

  9. leetcode刷题记录——树

    递归 104.二叉树的最大深度 /** * Definition for a binary tree node. * public class TreeNode { * int val; * Tree ...

  10. [LeetCode] Find Bottom Left Tree Value 寻找最左下树结点的值

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

随机推荐

  1. [转帖]一张图搞定redis内存优化及配置

    https://www.jianshu.com/p/3195663af83e   Redis内存优化及配置.png Redis优化及配置 Redis所有的数据都在内存中,而内存又是非常宝贵的资源.常用 ...

  2. 谈JVM xmx, xms等内存相关参数合理性设置

    作者:京东零售 刘乐 说到JVM垃圾回收算法的两个优化标的:吞吐量和停顿时长,并提到这两个优化目标是有冲突的.那么有没有可能提高吞吐量而不影响停顿时长,甚至缩短停顿时长呢?答案是有可能的,提高内存占用 ...

  3. 【VMware vSAN】使用命令行从vSAN集群中移除ESXi主机并加入到新的vSAN集群。

    说明 本文只是陈述了一种方法,不必评判谁对谁错谁好谁坏,选择适合自己的即可. 环境 站点名称 vCenter版本 vSAN集群 集群主机 主机版本 磁盘组 vcsa67.lab.com vCenter ...

  4. python从新手到安装指南

    说到python我是跟着官方文档自学入门,本文适用于windows 操作系统,基于Inter和amd的CPU(涵盖市面80%的电脑) 下载和安装python 对于window操作系统的初学者,进入 p ...

  5. MeshFilter mesh vs sharedMesh

    MeshFilter有两个属性mesh和sharedMesh,从官方文档和实际使用来说说这两者的区别 MeshFilter文档 Unity的MeshFilter文档:https://docs.unit ...

  6. 微信小程序-页面生命周期方法

    在经过上一篇文章的介绍之后,我们知道了大体的生命周期在什么时候执行,这次主要是以代码的形式来展示一下具体的阶段执行什么生命周期方法. 首先我们编写一个代码可以从首页跳转到日志页面: <!--in ...

  7. 《字节码编程》PDF107页,11万字。既然市面缺少ASM、Javassist、Byte-buddy成体系的学习资料,那我来!

    作者:小傅哥 博客:https://bugstack.cn - 汇总系列原创专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 让人怪不好意思的,说是出书有点膨胀,毕竟这不是走出版社的流程,选题. ...

  8. Python常用脚本-查询数据库,调用网站接口,下载文件保存到本地

    # coding=utf-8 # 证照模板下载,查询中心库,调用网站接口,下载文件保存到本地 import requests import json import datetime import xl ...

  9. P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II 题解

    题目链接:Yuno loves sqrt technology II 很早以前觉得还挺难的一题.本质就是莫队二次离线,可以参考我这篇文章的讲述莫队二次离线 P5501 [LnOI2019] 来者不拒, ...

  10. P9989 [Ynoi Easy Round 2023] TEST_69 题解

    题目链接: [Ynoi Easy Round 2023] TEST_69 首先GCD有比较良好的一些性质.我们观察到一次 \(GCD(a_i,x)\) 操作,会有以下两种变化. 如果 \(x \bmo ...