014. 找树左下角的值
题目链接:力扣
大概思路:
题目要求:
找到树的最底层里,最左边的节点的值。
递归法思路:
顺便一个遍历顺序,然后查找树最底层里,最左边的节点的值,然后返回。
树的最底层怎么判断?
到叶子节点就记录一个深度的最大值,同时记录这个叶子节点的值,然后继续遍历,遇见更大的深度,就改变收集的深度值和节点值,这样到遍历结束的时候,收集到的就是最底层的节点的值。
最左左节点"怎么收集的?(最底层的条件满足了)
递归顺序先向左,前中后序都是左右开始
遍历顺序为什么可以随意?
因为不需要在递归遍历过程中,对中节点做什么处理,只需要用到终止条件来更新数值。
递归三部曲:
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. 找树左下角的值相关推荐
- Java实现 LeetCode 513 找树左下角的值
513. 找树左下角的值 给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2/ \1 3 输出: 1 示例 2: 输入: 1/ \2 3/ / \ 4 5 6/7 输出: 7 注意 ...
- 找树左下角的值+路径总和+从前序和中序遍历序列构造二叉树(day18*)
这篇可以主要关注一下如何确定递归时是否需要返回值. LC513. 找树左下角的值 给定一个二叉树的根节点,请找出该二叉树的 最底层最左边 节点的值. 思路1 层序遍历 class Solution:d ...
- Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树
513 找树左下角的值 solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val ...
- 代码随想录第18天|找树左下角的值,路径总和,从中序和后序遍历序列构造二叉树
LeetCode513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 思路: 迭代法(只需要记录最后一行第一个节点的数值就可以了.): /*** Definitio ...
- LeetCode 513. 找树左下角的值 思考分析
题目 给定一个二叉树,在树的最后一行找到最左边的值. 递归解 左下角要满足两个条件: 1.深度最大的叶子结点 2.最左结点:使用前序遍历,优先左边搜索. 1.确定递归函数的参数和返回值 参数:树的根结 ...
- leetcode513. 找树左下角的值(dfs)
给定一个二叉树,在树的最后一行找到最左边的值. 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val ...
- [Swift]LeetCode513. 找树左下角的值 | Find Bottom Left Tree Value
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- LeetCode 513. 找树左下角的值(按层遍历 queue)
1. 题目 给定一个二叉树,在树的最后一行找到最左边的值. 2. 解题 利用队列按层次遍历 顺序,根右左,要求最左边的一个,所以根右左,最后一个队列元素就是答案 class Solution {pub ...
- leetcode —— 513. 找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 示例 2: 解题思路:使用广度优先遍历,因为题目要求寻找的是最底层的最左边的节点.因此我们维护一个变量--节点所在的树的高度,设根节点的高度 ...
最新文章
- Source Insight 经典教程
- 产业丨一文读懂人工智能产业链,未来10年2000亿美元市场
- 目标检测旋转增强源码
- 【运筹学】表上作业法 ( 示例 | 使用 “ 最小元素法 “ 找初始基可行解 )
- 学业水平考试网登录_江西学业水平考试成绩查询登录入口
- VTK:可视化算法之MarchingCases
- 小程序学习(2):vs code 安装插件
- Bootstrap模态框居中显示
- JAVA多线程售票问题
- OpenGL 坐标变换(1)
- 学习linux—— 磁盘相关指令
- 学习webpack系列之一 ---- (手动部署环境)
- 机器学习 数据预处理之特征编码(归纳整理版)
- 哥德巴赫猜想c#语言,哥德巴赫猜想算法c#实现方法
- F5 LTM ping 数据包丢包解决过程
- 深入理解Serdes 结构 之 CTLE和DFE 技术
- UFUNufun币ufun优趣集团
- HMS Core助力同程旅行,打造更贴心的用户出行体验
- php判断单选框是否被选中,JQuery form验证单选框是否选中经验总结
- 《Docker系列》Docker安装Hadoop
热门文章
- 5G科普——CU和DU分离
- 怎么在FLASH的场景中控制影片剪辑的播放和停止
- 【论文笔记】面向机载应用的多传感器图像融合技术综述
- 提高农业品牌互联网曝光度的“四个一工程”
- ​万字长文阐述前端技术浪潮与应用
- 陀螺仪和加速度计MPU6050的单位换算方法
- 二分图(染色法+匈牙利法)学习笔记
- 一些关于ROS的讨论 Robot Operating System – A flexible framework for writing robot software (ros.org)
- ios 自定义拍照页面_iOS开发笔记:自定义相机拍照
- 用Pandas秒秒钟搞定24张Excel报表,还做了波投放分析!