持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
题目详情
LeetCode题库序号 513. 找树左下角的值 ,难度为 中等。
Tag : 「DFS」
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [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/… 。