代码部分:
class Solution {
int maxDepth = Integer.MIN_VALUE;
int res;
public int findBottomLeftValue(TreeNode root) {
// Queue<TreeNode> queue = new LinkedList<>();
// queue.offer(root);
// while(!queue.isEmpty()) {
// root = queue.poll();
// if (root.right != null) queue.offer(root.right);
// if (root.left != null) queue.offer(root.left);
// }
// return root.val;
dfs(root,0);
return res;
}
// 前序遍历,当遍历到右子节点时,当前满足 max = depth 而不满足 max < depth 。所以只记录最左边的
void dfs(TreeNode root, int depth) {
if (root == null) return;
if(root.left == null && root.right == null) {
if(maxDepth <depth) {
maxDepth = depth;
res = root.val;
}
}
dfs(root.left,depth+1);
dfs(root.right,depth+1);
}
}
若采用广度优先,要注意先从右边遍历再从左边,那么最后一个出队的节点就是最深层的最左结点。
而深度优先时,前序遍历,把拟最深层,左边的节点下来,不断更新 max < depth ,同一层深度的节点,由于前序遍历只会记录最左边的。