1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
private int deepest;
private int ans;

public int findBottomLeftValue(TreeNode root) {
deepest = -1;
dfs(root, 0);
return ans;
}

private void dfs(TreeNode node, int depth) {
if (node == null) {
return;
}
dfs(node.left, depth + 1);
dfs(node.right, depth + 1);
if (node.left == null && node.right == null && depth > deepest) {
ans = node.val;
deepest = depth;
}
}
}

答案肯定是leaf node. 于是我们先走左边, 再走右边. 然后最后看自己是不是leaf node, 如果是并且depth比当前遇到的最深的还要深, 那么更新ans和deepest. 需要注意的是等于deepest的时候不能更新ans, 因为我们求的是最后一个row的最左边, 此时等于deepest说明我们之前来到过这个深度, 也是该深度左侧有node, 因此我们就不能更新ans.

时间复杂度: O(n)
空间复杂度: O(n)