代码随想录算法【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;
    }
};

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

以下是具体的递归过程:

相关推荐
玖釉-2 小时前
下一个排列:从字典序到原地算法的完整推导
数据结构·c++·windows·算法
IronMurphy2 小时前
【算法五十】62. 不同路径
算法
影寂ldy2 小时前
C#一维数组
算法
枕星而眠2 小时前
数据结构八大排序详解(一):四大简单排序
c语言·数据结构·c++·后端
过期动态2 小时前
【LeetCode 热题 100】移动零
java·数据结构·算法·leetcode·职场和发展·rabbitmq
努力努力再努力wz3 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
Dlrb12113 小时前
数据结构-栈
数据结构··内核栈·满栈空栈·增栈减栈
计算机安禾3 小时前
【算法分析与设计】第10篇:下界理论与NP完全性初步
大数据·人工智能·算法
水木流年追梦4 小时前
大模型入门-大模型分布式训练2
开发语言·分布式·python·算法·正则表达式·prompt