day22-513.找树左下角的值

513.找树左下角的值

力扣题目链接(opens new window)

给定一个二叉树,在树的最后一行找到最左边的值。

示例 1:

day22-513.找树左下角的值_第1张图片

示例 2:

day22-513.找树左下角的值_第2张图片

思路

迭代

迭代的思路最简单,只需层序记录每一层的第一个结点即可,代码如下:

class Solution {
public:
    int findBottomLeftValue(TreeNode* root) {
        queue<TreeNode*> qu;
       int res;
        if(root != nullptr)qu.push(root);
        while(!qu.empty()){
            int size = qu.size();
            for(int i=0;i<size;i++){
                TreeNode* node = qu.front();   qu.pop();
                if(i==0)res = node->val;
                if(node->left)qu.push(node->left);
                if(node->right)qu.push(node->right);
            }
        } 
        return res;
    }
};

递归

递归的思路则不太好理解。首先要确定树左下角的值是指什么?是指深度最大的一层中的叶子结点。

因此我们用depth表示深度,取深度最大的结点赋值即可。

遍历顺序我们选用前序遍历。

class Solution {
private:
    int res;
    int maxdepth;
public:
    int findBottomLeftValue(TreeNode* root) {
        maxdepth = INT_MIN;
        dis(root,0);
        return res;
    }
    void dis(TreeNode* root, int depth){
        if(root->left == nullptr && root->right == nullptr){
            if(depth>maxdepth){
                maxdepth = depth;
                res = root->val;
            }
        }
        if(root->left){
            dis(root->left,depth+1);
        }
        if(root->right){
            dis(root->right,depth+1);
        }
        return ;
    }
};
     dis(root->right,depth+1);
    }
    return ;
}

};


你可能感兴趣的:(算法,算法)