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 @ 2021-12-20 10:23  小傻孩丶儿  阅读(18)  评论(0编辑  收藏  举报