DFS之Find Bottom Left Tree Value leetcode(513)

题目要求找出二叉树的最底层的最左侧的叶节点。

思路:

1、要找最底层节点,考虑使用DFS,并且先访问左子树再访问右子树。

2、我们要需要记录叶子节点的深度,一边进行比较,用深度作为返回值,每次dfs都能得到每个节点的左右子树的深度,同时用引用的方式记录叶子节点的数值。

3、最后,比较深度,如果深度相同,返回左子树的叶节点,否则返回深度大的叶节点。

递归的条件:首先

class Solution {

public:
    int findBottomLeftValue(TreeNode* root) {
        int val = 0;
        dfs(root, 0, val);
        return val;
    }
    
    int dfs(TreeNode *node, int level, int &val)
    {
        if(NULL == node)
        {
            return level-1;
        }
        int l = 0;
        int r = 0;
        int left_val = 0;
        int right_val = 0;
        val = node->val;
        l = dfs(node->left, level+1, val);
        left_val = val;
        val = node->val;
        r = dfs(node->right, level+1, val);
        right_val = val;
        val = l>=r ? left_val:right_val;
        return max(l, r);    //每次都要返回最深的那个深度。作为dfs的返回值
        

    }


大佬的简洁解法:

class Solution {

public:

int res=0;    //记录结果
int height=0;    //记录深度
int findBottomLeftValue(TreeNode* root) {
    if(root==NULL) return -1;
    dfsHelper(root, 1);
    return res;
}
    
private:
    void dfsHelper(TreeNode* node, int depth)
    {
        if(node==NULL) return;
        if(height < depth) {
            res = node->val;
            height = depth;
        }
        dfsHelper(node->left, depth+1);
        dfsHelper(node->right, depth+1);
    }
};

猜你喜欢

转载自blog.csdn.net/u012260341/article/details/80376161