leecode刷题 二叉树的层级遍历

简介: 层序遍历二叉树,即按层次从左到右访问所有节点。给定二叉树的根节点 `root`,返回其节点值的层序遍历结果。每个层级的节点值存储在一个子列表中,最终返回一个包含这些子列表的列表。解决方案使用递归方法,通过 `Map` 记录每一层的节点值,最后将各层的结果按顺序加入最终结果列表中。

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:
image.png

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:

输入:root = [1]
输出:[[1]]
示例 3:

输入:root = []
输出:[]

提示:

树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000

/**
 * 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 List<List<Integer>> levelOrder(TreeNode root) {
   
        List<List<Integer>> nums = new ArrayList();
        Map<Integer, List<Integer>> map = new HashMap();
        int level = 0;

        map = getLevelSub(root, level, map);
        for (int i = 0; i < map.size(); i++) {
   
            nums.add(map.get(i));
        }

        return nums;
    }

    public Map<Integer, List<Integer>> getLevelSub(TreeNode root, int level, Map<Integer, List<Integer>> map) {
   
        if (root == null) {
   
            return map;
        }
        if (!map.containsKey(level)) {
   
            map.put(level, new ArrayList());
        }
        map.get(level).add(root.val);
        getLevelSub(root.left, level + 1, map);
        getLevelSub(root.right, level + 1, map);
        return map;
    }
}

问题关键点在于,如何构建每个层级的数组,开始的时候,我希望一次搞定,通过数组合并的方式,数据合并有个问题,我必须知道要合并的数组是哪些,这个在递归的过程会丢失.转换思路,其实只要知道每个数组的索引即可,数组的索引其实就是二叉树的层数,使用map记录层数,就可以解决这个问题

相关文章
|
8月前
|
算法
【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉搜索树中第K小的元素
【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉搜索树中第K小的元素
42 0
|
2天前
|
人工智能 索引
leecode刷题 将有序数组转换为二叉搜索树
给定一个升序排列的整数数组 `nums`,要求将其转换为一棵高度平衡的二叉搜索树(BST)。通过递归方法,选择数组中间元素作为根节点,左半部分构建左子树,右半部分构建右子树。优化后的代码使用索引递归,避免了数组复制操作,提高了效率。
|
19天前
leecode刷题 相同的树
给定两棵二叉树的根节点 p 和 q,编写一个函数来判断这两棵树是否相同。如果两棵树在结构上相同且对应节点的值相等,则认为它们是相同的。示例包括完全相同的树、结构不同或节点值不同的树。节点数在 [0, 100] 范围内,节点值在 [-10^4, 10^4] 范围内。
31 11
代码随想录Day15 二叉树 LeetCodeT513 找树左下角的值 T112路径总和 T106 从中序和后序遍历构造二叉树
代码随想录Day15 二叉树 LeetCodeT513 找树左下角的值 T112路径总和 T106 从中序和后序遍历构造二叉树
47 0
|
8月前
|
NoSQL 容器 消息中间件
递归题目树型实战
递归题目树型实战
|
8月前
|
Serverless
【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)
【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)
694 0
|
8月前
|
存储 算法
力扣102、 二叉树层级遍历
力扣102、 二叉树层级遍历
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
51 0
|
算法
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
59 0
|
Sentinel
力扣19删除链表的倒数第 N 个结点:思路分析+图文全解+方法总结(快慢指针法&递归法)+深入思考
力扣19删除链表的倒数第 N 个结点:思路分析+图文全解+方法总结(快慢指针法&递归法)+深入思考
182 0