【LeetCode513】找树左下角的值(dfs)

一、题目

在这里插入图片描述
在这里插入图片描述

二、思路

  • dfs遍历二叉树,其实可以直接用前序遍历,注意为了找到最早出现的最深的左节点,所以需要先遍历左子树,再遍历右子树。
  • 为了满足“最深”的条件,需要比较当前depthmaxdepth值,进行更新maxdepth
  • 其实题目要求找到最底层的最左边的节点,没指定一定是左孩子哈哈,如果没有左孩子,只有右孩子,那该右孩子也是最左边的节点。

三、代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
    
    
public:
    //这里的maxdepth不能初始化为0,因为是和实参0比较
    int left, maxdepth = -1;
    int findBottomLeftValue(TreeNode* root) {
    
    
        dfs(root, 0);
        return left;
    }
    void dfs(TreeNode* root, int depth){
    
    
        if(!root){
    
    
            return;
        }
        if(depth > maxdepth){
    
    
            left = root->val;
            ++maxdepth;
        }
        //先遍历左子树,再遍历右子树
        dfs(root->left, depth + 1);
        //注意这里当前节点的左孩子和右孩子的高度相同,并不会加2
        dfs(root->right, depth + 1);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/124192112