友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

513. Find Bottom Left Tree Value

Given a binary tree, find the leftmost value in the last row of the tree.

Example 1:

Input:

    2
   / \
  1   3

Output:
1

Example 2:

Input:

        1
       / \
      2   3
     /   / \
    4   5   6
       /
      7

Output:
7

Note: You may assume the tree (i.e., the given root node) is not NULL.

思路分析

常规思路是广度优先,记录每一层第一个节点的值。

看社区讨论,可以在广度优先的基础上做个优化:通常在队列里面先放左节点,再放右节点。反转一下,先放右节点,再放左节点,那么最后一个节点就是需要的节点。

广度优先比较熟悉,尝试了一下深度优先的解法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int curHeight = 0;

int curValue = 0;

/**
 * 尝试一下深度优先
 */
public int findBottomLeftValue(TreeNode root) {
  dfs(root, 0);
  return curValue;
}

private void dfs(TreeNode root, int height) {
  if (root == null) {
    return;
  }
  height++;
  dfs(root.left, height);
  dfs(root.right, height);
  if (height > curHeight) {
    curHeight = height;
    curValue = root.val;
  }
}