二叉树17:找树左下⻆的值

Posted 纵横千里,捭阖四方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树17:找树左下⻆的值相关的知识,希望对你有一定的参考价值。

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

 输出结果为7

 题使用层序遍历再合适不过了,比递归要好理解的多! 只需要记录最后一行第一个节点的数值就可以了。

/**
 * 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 {
    public int findBottomLeftValue(TreeNode root) {
        if (root.left == null && root.right == null) {
            return root.val;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        TreeNode temp = new TreeNode(-100);

        while (!queue.isEmpty()) {
            temp = queue.poll();

            if (temp.right != null) {
                // 先把右节点加入 queue
                queue.offer(temp.right);
            }
            if (temp.left != null) {
                // 再把左节点加入 queue
                queue.offer(temp.left);
            }
        }

        return temp.val;
    }
}

如果用递归该怎么做呢?

1.使用curMaxDepth代表当前遍历到的最大深度,depth记录遍历的深度
比如curMaxDepth=5,如果前序遍历到depth=2时,小于curMaxDepth,你就知道这一层已经有人到过了,你不是这一层的第一个,就这么简单

2.如果depth>curMaxDepth
就说明这一层你的depth>curMaxDepth,就说明你depth这一层没人到过,而且你是第一个
这样你就更新curMaxDepth为当前这个depth就可以


class Solution {
    private int curMaxDepth=-1,curVal=0;
    public int findBottomLeftValue(TreeNode root) {
        help(root,0);
        return curVal;
    }
    private void help(TreeNode root,int depth){
        if(root==null){return;}
        if(depth>curMaxDepth){
            curMaxDepth=depth;
            curVal=root.val;
        }
        help(root.left,depth+1);
        help(root.right,depth+1);
    }
}

我曾尝试找出哪些题适合前序,哪些适合中序,哪些适合层次遍历,但是做到这个题之后我彻底放弃这个想法,因为很多问题都可以从不同的视角来解决问题。因此深入理解四种遍历方式的原理,然后见招拆招才是真正该训练的东西。

以上是关于二叉树17:找树左下⻆的值的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 513 找树左下角的值[BFS 二叉树] HERODING的LeetCode之路

leetcode中等513找树左下角的值

leetcode刷穿二叉树

513. 找树左下角的值

二叉树:我的左下角的值是多少?

Java 求解找树左下角的值