leetcode二叉树-中等-二叉树的层序遍历 II

我的做法只是层序遍历+reverse
这是正经做法 https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/python-di-gui-jie-fa-xiang-xi-zhu-shi-yu-2dw2/


package binarytree.levelOrderBottom;

import binarytree.untils.GenerateTreeNode;
import binarytree.untils.TreeNode;

import java.util.*;

/**
 * 107. 二叉树的层序遍历 II
 * 给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
 *
 * 例如:
 * 给定二叉树 [3,9,20,null,null,15,7],
 *
 *     3
 *    / \
 *   9  20
 *     /  \
 *    15   7
 * 返回其自底向上的层序遍历为:
 *
 * [
 *   [15,7],
 *   [9,20],
 *   [3]
 * ]
 */
public class levelOrderBottom {
    //偷个懒,层序遍历 然后反转结果集数组
    public static List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        levelOrder(root,res);
        Collections.reverse(res);
        return  res;
    }

    private static void levelOrder(TreeNode root,List<List<Integer>> res ){
        if(root==null){
            return;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            List<Integer> list = new LinkedList<>();
            int size = queue.size();

            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left!=null){
                    queue.add(node.left);
                }
                if(node.right!=null){
                    queue.add(node.right);
                }
            }
            if(list.size()!=0){
                res.add(list);
            }
        }
    }

    public static void main(String[] args) {
        Integer[] nums = {1, 2, 3, 4, 5, 6, 7};
        TreeNode treeNode = GenerateTreeNode.generateTreeNode(nums);
        List<List<Integer>> lists = levelOrderBottom(treeNode);
        System.out.println();
    }
}

posted @   小傻孩丶儿  阅读(22)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2019-12-20 Bit Manipulation-leetcode
2019-12-20 转载-C语言中<<、>>、&、|的实际用途
2019-12-20 转载-备胎算法
2019-12-20 转载-Archunit的使用
点击右上角即可分享
微信分享提示