春招打卡d13n21-leetcode刷题107二叉树的层序遍历 II

125 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode刷题107二叉树的层序遍历 II

前文

本文为leetcode二叉树类型题目,题目序号107,主要考察二叉树层序遍历相关知识。

题目信息

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

解题思路

根据题目信息,很显然本题目为二叉树层序遍历相关题目。而题目目标为按层将数据存入二维数组,我们可以轻易想到解题思路主要是一个反向的二叉树层序遍历。因此,本题主要的解题思路采用层序遍历,在得到二叉树层序遍历结果后,再将结果处理后放入到目标数组中作为结果。而在层序遍历中,利用层数作为key,将结果存储到map中。二叉树的层序遍历则采用常用的递归方案即可。最后将map中的结果转化为我们需要的二位数组即可得到目标答案。也就是采用二叉树层序遍历即可完美解决该题目。

解题代码

Map<Integer,List<Integer>> map = new HashMap<>();
public List<List<Integer>> levelOrderBottom(TreeNode root) {
    int depth = 0;
    if(root != null){
        levelOrderBottom(root,depth);
    }
    List<List<Integer>> result = new ArrayList<>();
    for (int i = map.size() - 1; i >= 0 ; i--) {
        result.add(map.get(i));
    }
    return result;
}

public void levelOrderBottom(TreeNode root,int depth) {
    List<Integer> list = map.getOrDefault(depth,new ArrayList<>());
    list.add(root.val);
    map.put(depth,list);
    if(root.left != null){
        levelOrderBottom(root.left,depth + 1);
    }
    if(root.right != null){
        levelOrderBottom(root.right,depth + 1);
    }
}

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。