题目链接:力扣

大概思路:

题目要求:

找到树的最底层里,最左边的节点的值。

递归法思路:

顺便一个遍历顺序,然后查找树最底层里,最左边的节点的值,然后返回。

树的最底层怎么判断?

到叶子节点就记录一个深度的最大值,同时记录这个叶子节点的值,然后继续遍历,遇见更大的深度,就改变收集的深度值和节点值,这样到遍历结束的时候,收集到的就是最底层的节点的值。

最左左节点"怎么收集的?(最底层的条件满足了)

递归顺序先向左,前中后序都是左右开始

遍历顺序为什么可以随意?

因为不需要在递归遍历过程中,对中节点做什么处理,只需要用到终止条件来更新数值。

递归三部曲:

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

参数输入树节点,返回树的最底层里,最左边的节点的值,返回int类型。

int findBottomLeftValue(TreeNode* root) {}

2.明确终止条件

遇见叶子节点的时候,更新深度最大值以及更新叶子节点的值,然后返回。

(第一次是记录,后面是判断要不要更新)

if (root->left == NULL && root->right == NULL) {if (depth > maxDepth) {maxDepth = depth;           // 更新最大深度result = root->val;   // 最大深度最左面的数值}return;
}

3.确定单层递归逻辑

向左递归的下面加返回当前节点的值。然后结束返回。

(为防止空指针异常,要加个if判断指向下个节点的指针存不存在)

if (root->left) {   // 左depth++; // 深度加一traversal(root->left, depth);depth--; // 回溯,深度减一
}
if (root->right) { // 右depth++; // 深度加一traversal(root->right, depth);depth--; // 回溯,深度减一
}
return;

4.总代码:

class Solution {
public:int maxDepth = INT_MIN;//设计成最小方便更新int result;void traversal(TreeNode* root, int depth) {if (root->left == NULL && root->right == NULL) {if (depth > maxDepth) {maxDepth = depth;result = root->val;}return;}if (root->left) {depth++;traversal(root->left, depth);depth--; // 回溯}if (root->right) {depth++;traversal(root->right, depth);depth--; // 回溯}return;}int findBottomLeftValue(TreeNode* root) {traversal(root, 0);return result;}
};

写代码时遇见的问题:

递归过程的深度数值变化过程没考虑进去。

个人想法:

感觉确实有些疑问在思路过程中没法解释的好。排版怎么排清晰点?

014. 找树左下角的值相关推荐

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

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

  2. 找树左下角的值+路径总和+从前序和中序遍历序列构造二叉树(day18*)

    这篇可以主要关注一下如何确定递归时是否需要返回值. LC513. 找树左下角的值 给定一个二叉树的根节点,请找出该二叉树的 最底层最左边 节点的值. 思路1 层序遍历 class Solution:d ...

  3. Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树

    513 找树左下角的值 solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val ...

  4. 代码随想录第18天|找树左下角的值,路径总和,从中序和后序遍历序列构造二叉树

    LeetCode513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 思路: 迭代法(只需要记录最后一行第一个节点的数值就可以了.): /*** Definitio ...

  5. LeetCode 513. 找树左下角的值 思考分析

    题目 给定一个二叉树,在树的最后一行找到最左边的值. 递归解 左下角要满足两个条件: 1.深度最大的叶子结点 2.最左结点:使用前序遍历,优先左边搜索. 1.确定递归函数的参数和返回值 参数:树的根结 ...

  6. leetcode513. 找树左下角的值(dfs)

    给定一个二叉树,在树的最后一行找到最左边的值. 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val ...

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

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. LeetCode 513. 找树左下角的值(按层遍历 queue)

    1. 题目 给定一个二叉树,在树的最后一行找到最左边的值. 2. 解题 利用队列按层次遍历 顺序,根右左,要求最左边的一个,所以根右左,最后一个队列元素就是答案 class Solution {pub ...

  9. leetcode —— 513. 找树左下角的值

    给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 示例 2: 解题思路:使用广度优先遍历,因为题目要求寻找的是最底层的最左边的节点.因此我们维护一个变量--节点所在的树的高度,设根节点的高度 ...

最新文章

  1. Source Insight 经典教程
  2. 产业丨一文读懂人工智能产业链,未来10年2000亿美元市场
  3. 目标检测旋转增强源码
  4. 【运筹学】表上作业法 ( 示例 | 使用 “ 最小元素法 “ 找初始基可行解 )
  5. 学业水平考试网登录_江西学业水平考试成绩查询登录入口
  6. VTK:可视化算法之MarchingCases
  7. 小程序学习(2):vs code 安装插件
  8. Bootstrap模态框居中显示
  9. JAVA多线程售票问题
  10. OpenGL 坐标变换(1)
  11. 学习linux—— 磁盘相关指令
  12. 学习webpack系列之一 ---- (手动部署环境)
  13. 机器学习 数据预处理之特征编码(归纳整理版)
  14. 哥德巴赫猜想c#语言,哥德巴赫猜想算法c#实现方法
  15. F5 LTM ping 数据包丢包解决过程
  16. 深入理解Serdes 结构 之 CTLE和DFE 技术
  17. UFUNufun币ufun优趣集团
  18. HMS Core助力同程旅行,打造更贴心的用户出行体验
  19. php判断单选框是否被选中,JQuery form验证单选框是否选中经验总结
  20. 《Docker系列》Docker安装Hadoop

热门文章

  1. 5G科普——CU和DU分离
  2. 怎么在FLASH的场景中控制影片剪辑的播放和停止
  3. 【论文笔记】面向机载应用的多传感器图像融合技术综述
  4. 提高农业品牌互联网曝光度的“四个一工程”
  5. ​万字长文阐述前端技术浪潮与应用
  6. 陀螺仪和加速度计MPU6050的单位换算方法
  7. 二分图(染色法+匈牙利法)学习笔记
  8. 一些关于ROS的讨论 Robot Operating System – A flexible framework for writing robot software (ros.org)
  9. ios 自定义拍照页面_iOS开发笔记:自定义相机拍照
  10. 用Pandas秒秒钟搞定24张Excel报表,还做了波投放分析!