当前位置: 首页 > news >正文

算法day16(补第15天)|用递归方法求解:513.找树左下角的值

@TOC

513.找树左下角的值

递归法(补day15)

难度较大,代码如下:

class Solution {
public:int result;int maxdepth=INT_MIN;void traversal(TreeNode* root,int depth){if(root->left==nullptr&&root->right==nullptr){if(maxdepth<depth){maxdepth=depth;result=root->val;}return;}if(root->left){depth++;traversal(root->left,depth);depth--;}if(root->right){depth++;traversal(root->right,depth);depth--;}}int findBottomLeftValue(TreeNode* root) {int depth=1;traversal(root,depth);return result; }
};

总体思路(递归):

  • 参数:在这题中,深度是至关重要的参数,因为当遍历到叶子结点时,我们只有通过深度的大小来判断它是否是最后一层的结点。所以,深度肯定是在遍历中要变化的,所以把深度作为一个重要参数
  • **终止条件:**当以叶节点为终止条件时,基本上都伴有终止行为,这两者是相辅相成的。因为最后的结果也只能在叶节点出获取,所以也已叶节点为终止条件。这类题目一般会伴有回溯。
  • **单层递归逻辑:**由于没有什么对当前结点的操作,所以没有”中“了,直接上左右孩子。但是必须保证的是,左孩子一点过要在右孩子之前,目的:当左右孩子同时身处最后一层时,是左孩子先触碰到终止条件然后被赋值,然后右孩子再碰到终止条件,但是由于此时的depth==maxdepth,所以不能改变最后的result了,这就是此题最精妙之处。

一些代码细节

class Solution {
public:int result;int maxdepth=INT_MIN;
  • 在力扣里面是可以设置一些全局变量的,这些全局变量在递归函数里面赋完值之后,回到主函数里面依然是递归函数里面所赋的值——即全局。
  • 还有一些贯穿整个递归过程的变量也可以作为全局变量,如此处的maxdepth,之前的vector result也是可以的。

http://www.mrgr.cn/news/15882.html

相关文章:

  • ★ 算法OJ题 ★ 力扣11 - 盛水最多的容器
  • SpringBoot SSM vue在线作业考试系统
  • vue子组件样式影响父组件
  • 使用 ip addr add 命令管理网络接口 IP 地址
  • 解题-写一个程序判断当前机器的大小端存储模式 #两种方法
  • SpringCloud乐尚代驾学习笔记:司机端登录(四)
  • 【化学方程式配平 / 3】
  • 笔记:应用Visual Studio Profiler分析CPU使用情况
  • Python数据分析的数据导入和导出
  • 「数组」二分查找模版|二段性分析|恢复二段性/ LeetCode 35|33|81(C++)
  • Python中的“break”与“continue”:控制循环的艺术
  • DDR test Tool for imx9
  • 【Python篇】Python 类和对象:详细讲解(上篇)
  • 生产环境中变态开启devtools(强制)
  • classA cla= ...; if(cla == nullptr) 这种写法是否安全
  • 远程教学必备神器:热门远程控制软件大盘点
  • Vue3.0教程001:Vue3简介
  • 一些零碎的关于合约测试,ERC20调用的知识
  • python基础(14内置函数介绍)
  • 第22周:调用Gensim库训练Word2Vec模型