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

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

以下是具体的递归过程:

相关推荐
緈福的街口10 分钟前
【leetcode】130. 被围绕的区域
算法·leetcode·职场和发展
THMAIL28 分钟前
机器学习从入门到精通 - KNN与SVM实战指南:高维空间中的分类奥秘
人工智能·python·算法·机器学习·支持向量机·分类·逻辑回归
皆过客,揽星河1 小时前
c语言程序之魂——算法(练习题,流程图,程序源码)
c语言·算法·流程图·源码·辗转相除法·c语言程序设计
zc.ovo1 小时前
牛子图论1(二分图+连通性)
数据结构·c++·算法·深度优先·图论
通往曙光的路上1 小时前
JAVA 十二幕啦啦啦啦啦啦啦啊啦啦啦啦a
java·开发语言·算法
得物技术1 小时前
得物灵犀搜索推荐词分发平台演进3.0
算法·架构·排序算法
红糖果仁沙琪玛1 小时前
FPGA实现流水式排序算法
算法·fpga开发·排序算法
红糖果仁沙琪玛2 小时前
FPGA离群值剔除算法
算法·fpga开发
Q741_1472 小时前
C++ 面试高频考点 力扣 162. 寻找峰值 二分查找 题解 每日一题
c++·算法·leetcode·面试·二分查找
j_xxx404_2 小时前
数据结构:栈和队列(上)
c语言·数据结构·算法·leetcode