题解:层序遍历简单,此篇记录递归法,要注意左下角的值并不一定是左叶子节点,遍历思路形象化就是按先左后右的顺序遍历每一条分支,若遍历到叶子结点,看此时深度有没有超过之前的值,超过了就记录下来节点val,若没有就开始遍历下一条分支。
代码如下:
class Solution {
public:
int maxDepth = INT_MIN;
int result;
int traversal(TreeNode* root, int depth){
if(root->left == NULL&& root->right ==NULL){
if (depth>maxDepth){
maxDepth= depth;
result = root->val;
}
return result;
}
if(root->left){
depth++;
traversal(root->left,depth);
depth--;
}
if(root->right){
depth++;
traversal(root->right,depth);
depth--;
}
return result;
}
int findBottomLeftValue(TreeNode* root) {
return traversal(root,0);
}
};
注意:
关于深度的计算,一种是return1+递归,一种如题中所示单层递归逻辑中depth++。