0513. 找树左下角的值

题目地址(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

BFS

思路

其实问题本身就告诉你怎么做了

在树的最后一行找到最左边的值。

问题再分解一下

  • 找到树的最后一行

  • 找到那一行的第一个节点

不用层序遍历简直对不起这个问题,这里贴一下层序遍历的流程

代码

  • 代码支持:JS,Python,Java,CPP, Go, PHP

JS Code:

Python Code:

Java:

CPP:

Go Code:

PHP Code:

复杂度分析

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

  • 空间复杂度:$O(Q)$,其中 Q 为队列长度,最坏的情况是满二叉树,此时和 N 同阶,其中 N 为树的节点总数

DFS

思路

树的最后一行找到最左边的值,转化一下就是找第一个出现的深度最大的节点,这里用先序遍历去做,其实中序遍历也可以,只需要保证左节点在右节点前被处理即可。 具体算法为,先序遍历 root,维护一个最大深度的变量,记录每个节点的深度,如果当前节点深度比最大深度要大,则更新最大深度和结果项。

代码

代码支持:JS,Python,Java,CPP

JS Code:

Python Code:

Java Code:

CPP:

复杂度分析

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

  • 空间复杂度:$O(h)$,其中 h 为树的高度。

最后更新于

这有帮助吗?