0
点赞
收藏
分享

微信扫一扫

【二叉树】513. 找树左下角的值

cnlinkchina 2022-03-25 阅读 47

题目:

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

示例 1:

513.找树左下角的值

示例 2:

513.找树左下角的值1

题解:

1.递归

步骤:

1.确定递归函数的参数和返回值

参数必须有要遍历的树的根节点,还有就是一个int型的变量用来记录最长深度。 这里就不需要返回值了,所以递归函数的返回类型为void。

本题还需要类里的两个全局变量,maxLen用来记录最大深度,maxleftValue记录最大深度最左节点的数值。

如果需要遍历整棵树,递归函数就不能有返回值。如果需要遍历某一条固定路线,递归函数就一定要有返回值!

2.确定终止条件

当遇到叶子节点的时候,就需要统计一下最大的深度了,所以需要遇到叶子节点来更新最大深度。

3.确定单层递归的逻辑

在找最大深度的时候,递归的过程中依然要使用回溯,左子树找完再找右子树。

/**
 * 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 maxLen = -1;
    int maxLeftValue = 0;

    public int findBottomLeftValue(TreeNode root) {
        maxLeftValue = root.val;
        findBottomLeft(root, 0);
        return maxLeftValue;
    }

    public void findBottomLeft(TreeNode root, int leftLen) {
        if (root.left == null && root.right == null) { //遇到叶子节点
            if (leftLen > maxLen) {
                maxLen = leftLen; //更新最大深度
                maxLeftValue = root.val; //最大深度最左边的数值
            }
        }

        if (root.left != null) {
            findBottomLeft(root.left, leftLen + 1); /回溯,leftLen返回后没变
        }
        if (root.right != null) {
            findBottomLeft(root.right, leftLen + 1);
        }        
    }
}

参考:代码随想录 

举报

相关推荐

0 条评论