leetcode 513题

Posted by franki on November 17, 2020

leetcode 513题 找树左下角的值

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

示例

输入:

    2
   / \
  1   3

输出:
1

示例

输入:

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

输出:
7

思路

1 利用宽度优先搜索(层序遍历)的方式,获取每个节点遍历后的值,更新这个值,即是求解的值

2 利用深度优先,不断获取当前节点,更新答案

代码

// bfs
function findBottomLeftValue(root) {
    if (root === null) {
        return 0;
    }
    var queue = [root];
    var leftValue = root.val;

    while (queue.length) {
        var size = queue.length;
        leftValue = queue[0].val;
        while (size) {
            var curr = queue.shift();
            if (curr.left) {
                queue.push(curr.left);
            }
            if (curr.right) {
                queue.push(curr.right);
            }
            size--;
        }
    }
    return leftValue;
}

// dfs
function findBottomLeftValue(root) {
    var maxDepth = -1;
    var ans = -1;

    var dfs = function(root, depth) {
      if (root === null) {
        return null;
      }
      if (depth > maxDepth) {
        maxDepth = depth;
        ans = root.val;
      }
      dfs(root, depth + 1);
      dfs(root, depth + 1);
      return ans;
    }

    return dfs(root, 1);
}

复杂度分析

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