「LeetCode」513-找树左下角的值

117 阅读1分钟

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

一.题目:

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

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

示例 1:

image.png

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

示例 2:

image.png

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

提示:

  • 二叉树的节点个数的范围是 [1,10^4]
  • -2^31 <= Node.val <= 2^31 - 1

二、思路分析:

还是根据题目来找到关键信息,这道题的题目很简短,所以直接就告诉我们应该干什么,要求我们找出二叉树的最底层最左边节点的值,所以我们可以有两种方法去解决这道题目:

  1. 利用深度遍历的方法,因为我们要找到最下层的最左边的节点值,所以我们利用深度遍历去记录我们走到的高度,并与初始化的高度进行对比,如果发现现在的高度是比较中的大值,就可以把节点值赋予结果,需要注意这里的左右子树都需要遍历。
  2. 第二种方法是利用到了层序遍历的方法,也就是利用到了队列的模型,我们起初把根节点压入栈中,随后不断的进行出队和入队操作最终也是可以求到最终的结果的。

本题的代码采用的是深度遍历

三、代码:

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function findBottomLeftValue(root: TreeNode | null): number {
    const dfs = (root:TreeNode, height) => {
        if(root === null) return;
        height++
        dfs(root.left, height)
        dfs(root.right, height)
        if(height > maxHeight){
            res = root.val;
            maxHeight = height;
        }
    }
    let res: number;
    let maxHeight = -1;
    dfs(root, 0);
    return res;
};

四、总结:

一般这种找二叉树的某个节点的值的问题我们都可以使用二种方法进行求解:层序遍历深度遍历,所以一般知道掌握好两个方法的基本思路就能够解决这类问题。