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

@TOC

513.找树左下角的值

递归法(补day15)

难度较大,代码如下:

cpp 复制代码
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了,这就是此题最精妙之处。

一些代码细节

cpp 复制代码
class Solution {
public:
    int result;
    int maxdepth=INT_MIN;
  • 在力扣里面是可以设置一些全局变量的,这些全局变量在递归函数里面赋完值之后,回到主函数里面依然是递归函数里面所赋的值------即全局。
  • 还有一些贯穿整个递归过程的变量 也可以作为全局变量 ,如此处的maxdepth ,之前的vector result也是可以的。
相关推荐
未来之窗软件服务5 小时前
自己写算法(九)网页数字动画函数——东方仙盟化神期
前端·javascript·算法·仙盟创梦ide·东方仙盟·东方仙盟算法
豐儀麟阁贵5 小时前
基本数据类型
java·算法
Larry_Yanan6 小时前
QML学习笔记(三十四)QML的GroupBox、RadioButton
c++·笔记·qt·学习·ui
程序员老舅7 小时前
干货|腾讯 Linux C/C++ 后端开发岗面试
linux·c语言·c++·编程·大厂面试题
乐迪信息7 小时前
乐迪信息:基于AI算法的煤矿作业人员安全规范智能监测与预警系统
大数据·人工智能·算法·安全·视觉检测·推荐算法
程序员Aries7 小时前
自定义网络协议与序列化/反序列化
linux·网络·c++·网络协议·程序人生
Pafey7 小时前
MFC中一个类的成员变量值自动被篡改:多重继承带来的问题
c++·mfc
hsjkdhs7 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
立志成为大牛的小牛8 小时前
数据结构——十七、线索二叉树找前驱与后继(王道408)
数据结构·笔记·学习·程序人生·考研·算法
星空下的曙光8 小时前
Node.js crypto模块所有 API 详解 + 常用 API + 使用场景
算法·node.js·哈希算法