前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 107. 二叉树的层次遍历 II

LeetCode 107. 二叉树的层次遍历 II

作者头像
手撕代码八百里
发布2020-07-28 18:07:45
2470
发布2020-07-28 18:07:45
举报
文章被收录于专栏:猿计划猿计划猿计划

107. 二叉树的层次遍历 II

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

例如: 给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其自底向上的层次遍历为:

[
  [15,7],
  [9,20],
  [3]
]

解题思路以及代码

首先这个题是在二叉树的层次遍历的基础上进行的。 可以看一下,我写的这个题解: LeetCode 102. 二叉树的层序遍历

这里就不在啰嗦层次遍历了。

如果你不懂二叉树的遍历可以看: 我是怎么一步一步调试出来二叉树的遍历(超精彩配图),二叉树遍历再也不用愁了

解这个题时,我们可以使用链表的头插法进行插入。

每一层的List都插入另一个List的头部,即可完成本题。

由于太简单了,所以就不添加注释了。只改动了一个地方: lists.add(0,list);

核心代码:

 static public List<List<Integer>> levelOrder(TreeNode root) {

        List<List<Integer>> lists = new ArrayList<>();

        if(root==null) return lists;


        TreeNode treeNode = root;

        LinkedList<TreeNode> queue = new LinkedList<>();

        queue.add(root);

        while (!queue.isEmpty()){

            int n = queue.size();
            int index = 0;
            List<Integer> list = new ArrayList<>();


            while (index<n){
                TreeNode node = queue.pop();

                list.add(node.val);

                if(node.left!=null)
                    queue.add(node.left);

                if(node.right!=null)
                    queue.add(node.right);

                index++;

            }

            lists.add(0,list);

        }



        return lists;

   }

全部代码:

package tree.二叉树的层次遍历2;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;

class Solution {

    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(5);
        t1.left=t2;
        t1.right=t3;
        t2.left=t4;
        t2.right=t5;


        System.out.println();
        System.out.println("层次遍历:");
        List<List<Integer>> lists = levelOrder(t1);

        System.out.println("结果:"+lists.toString());

        System.out.println("遍历结果:");

        lists.stream().forEach(li -> {

            li.stream().forEach(ll -> {
                System.out.print(ll.intValue()+" ");
            });

            System.out.println();

        });

    }

   static public List<List<Integer>> levelOrder(TreeNode root) {

        List<List<Integer>> lists = new ArrayList<>();

        if(root==null) return lists;


        TreeNode treeNode = root;

        LinkedList<TreeNode> queue = new LinkedList<>();

        queue.add(root);

        while (!queue.isEmpty()){

            int n = queue.size();
            int index = 0;
            List<Integer> list = new ArrayList<>();


            while (index<n){
                TreeNode node = queue.pop();

                list.add(node.val);

                if(node.left!=null)
                    queue.add(node.left);

                if(node.right!=null)
                    queue.add(node.right);

                index++;

            }

            lists.add(0,list);

        }



        return lists;

   }
}

class TreeNode {
    int val;//每个节点存放的数据
    TreeNode left;//左节点
    TreeNode right;//右节点
    TreeNode(int x) { val = x; }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 107. 二叉树的层次遍历 II
  • 解题思路以及代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档