代码随想录算法【Day16】

Day16

513.找二叉树左下角的值

本题使用迭代法更简单,使用迭代法和递归法的区别是什么

递归法

目标就是找深度最大的叶子结点

无论前中后序遍历,都是左节点先被遍历到,所以一旦得到深度最大的节点,就是最后一行最靠左侧的节点

这里没有处理中的逻辑,因为前中后序都可以,只要强调左在右的前面

复制代码
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;
    }
};

一个节点只知道它的左右孩子节点而不知道它的父节点,而回溯实际上并不需要知道父节点,因为它利用了函数调用栈和局部变量的特性。

以下是具体的递归过程:

相关推荐
今天吃饺子1 小时前
小创新模型!6种2024算法优化BiTCN-SVM单变量输入单步预测,MATLAB机器学习预测全家桶再更新...
人工智能·算法·机器学习·支持向量机·matlab
廖显东-ShirDon 讲编程2 小时前
《零基础Go语言算法实战》【题目 2-5】函数参数的值传递和引用传递
算法·程序员·go语言·web编程·go web
不玩return的马可乐2 小时前
LeetCode 747. 至少是其他数字两倍的最大数
数据结构·c++·程序人生·算法·leetcode
bgf_me3 小时前
代码随想录算法训练营第三十二天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
算法
怎么名字都重复3 小时前
1.两数之和--力扣
java·数据结构·算法·leetcode·软件工程
Odaily_3 小时前
SVM赛道概览:MoveVM落地,SVM能走多远
人工智能·算法·机器学习·支持向量机·数据挖掘
adam_life3 小时前
http://noi.openjudge.cn/——3.9数据结构之C++STL——【3342:字符串操作】
数据结构·c++·可变长度字符序列·字符串string
深图智能3 小时前
OpenCV的一种改进型的素描特效算法
图像处理·opencv·算法·计算机视觉
Mr.W.T3 小时前
负载均衡原理及算法
算法·负载均衡
KeyPan4 小时前
【机器学习:八、逻辑回归】
人工智能·算法·机器学习·数据挖掘·逻辑回归