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

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

以下是具体的递归过程:

相关推荐
划破黑暗的第一缕曙光几秒前
[数据结构]:5.二叉树链式结构的实现1
数据结构
91刘仁德4 分钟前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
青桔柠薯片7 分钟前
数据结构:单向链表,顺序栈和链式栈
数据结构·链表
diediedei15 分钟前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI26 分钟前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz120733 分钟前
分治算法(c++)
c++·算法
XiaoFan01241 分钟前
将有向工作流图转为结构树的实现
java·数据结构·决策树
睡一觉就好了。1 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
齐落山大勇1 小时前
数据结构——单链表
数据结构
Tansmjs1 小时前
C++编译期数据结构
开发语言·c++·算法