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

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

以下是具体的递归过程:

相关推荐
he___H2 小时前
数据结构-移位
数据结构
电子_咸鱼2 小时前
LeetCode——Hot 100【电话号码的字母组合】
数据结构·算法·leetcode·链表·职场和发展·贪心算法·深度优先
仰泳的熊猫2 小时前
LeetCode:785. 判断二分图
数据结构·c++·算法·leetcode
rit84324992 小时前
基于MATLAB实现基于距离的离群点检测算法
人工智能·算法·matlab
my rainy days4 小时前
C++:友元
开发语言·c++·算法
haoly19894 小时前
数据结构和算法篇-归并排序的两个视角-迭代和递归
数据结构·算法·归并排序
微笑尅乐4 小时前
中点为根——力扣108.讲有序数组转换为二叉搜索树
算法·leetcode·职场和发展
小梁努力敲代码4 小时前
java数据结构--List的介绍
java·开发语言·数据结构
im_AMBER5 小时前
算法笔记 05
笔记·算法·哈希算法
夏鹏今天学习了吗5 小时前
【LeetCode热题100(46/100)】从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展