513.找树左下角的值

https://leetcode-cn.com/problems/find-bottom-left-tree-value/

题目描述

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

示例 1:

输入:

    2
   / \
  1   3

输出:
1


示例 2:

输入:

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

输出:
7


注意: 您可以假设树(即给定的根节点)不为 NULL。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-bottom-left-tree-value
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法 1:层次遍历

思路

按照题目意思我们只需要找到最后一层,返回最左边的节点即可。

所以只要对二叉树进行层次遍历,等遍历到最后一层的时候,返回第一个节点。

bfs

伪代码

层次遍历模板 1:

层次遍历模板 2:

代码(JavaScript/Python/C++)

JavaScript Code

Python Code

JavaScript Code

C++ Code

复杂度分析

  • 时间复杂度:$O(N)$,其中 N 为节点数。

  • 空间复杂度: $O(q)$,q 为队列长度。最坏情况是满二叉树,此时 q 为 $2/N$,即为 $O(N)$,N 为二叉树节点数。

方法 2:DFS

思路

想一下递归的路线,如果我们先递归遍历左子树再遍历右子树,那么每遍历到新一层的时候,都是先访问最左边的节点。

  • 所以我们只需要在遍历到新一层的时候,记录第一个节点。

  • depth 来记录当前层次,用 maxDepth 来记录已经遍历过的最深层次,当 depth > maxDepth 的时候,说明遍历到了新层次:

    • 记录第一个节点的值

    • 更新 maxDepth

伪代码

复杂度分析

  • 时间复杂度:$O(N)$,其中 N 为节点数。

  • 空间复杂度:$O(h)$,其中 $h$ 为树的深度,最坏的情况 $h$ 等于 $N$,其中 N 为节点数,此时树退化到链表。

代码(JavaScript/Python/C++)

JavaScript Code

Python Code

C++ Code

更多题解可以访问:https://github.com/suukii/91-days-algorithm

Last updated

Was this helpful?