刷完LeetCode题库——513. 找树左下角的值

84 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

题目详情

LeetCode题库序号 513. 找树左下角的值 ,难度为 中等

Tag : 「DFS」

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例 1:

image.png

输入: root = [2,1,3]
输出: 1

示例 2:

image.png

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

  • 二叉树的节点个数的范围是 [1,104]
  • -231 <= Node.val <= 231 - 1

深度优先搜索(DFS)

题解思路:

这道题目是一个非常经典的深度优先搜索的题目,但是这道题目中存在着一个坑点,假设你以为返回的是树左节点的部分就大错特错了。它其实要查找的是树的最左的元素节点。并不只是树的做子树的左节点。所以这时候还要引入高度的概念。必须是要高度最高的一个节点。然后在左边的部分的。所以可以采用深度优先搜索。然后必须是左子树先搜索,然后才到右子树。否则同一层高度的节点就不是最左节点了。具体可以参见代码。

题解代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int curVal = 0;
    int curHeight = 0;

    public int findBottomLeftValue(TreeNode root) {
        dfs(root, 0);
        return curVal;
    }

    public void dfs(TreeNode node, int height) {
        if (node == null) {
            return;
        }

        height++;
        dfs(node.left, height);
        dfs(node.right, height);
        if (height > curHeight) {
            curHeight = height;
            curVal = node.val;
        }

    }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.513 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…