Easy-题目27:107.Binary Tree Level Order Traversal II

原创 2016年05月30日 20:12:50

题目原文:
Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
题目大意:
给出一个二叉树,求层次遍历结果。其中,层次靠后的先输出。
题目分析:
与普通的层次遍历不同,本题要求输出为二维数组,其中第一层维度代表层数。因此使用了两个队列,分别记录节点和层数。每次层数发生变化时,将当前数组(第二层数组)加入第一层。
源码:(language:java)

public class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        Queue<Integer> levelqueue=new LinkedList<Integer>();

        queue.add(root);
        levelqueue.add(1);
        List<List<Integer>> result=new ArrayList();
        List<Integer> temp=new ArrayList<Integer>();
        if(root==null)
            return result;
        while(!queue.isEmpty())     {
            TreeNode current=queue.remove();
            int curLevel=levelqueue.remove();           
            if(curLevel==result.size()) {
                temp.add(current.val);
            }
            else    {
                result.add(temp);               

                temp=new ArrayList<Integer>();
                temp.add(current.val);  
            }
            if(current.left!=null) {
                queue.add(current.left);
                levelqueue.add(curLevel+1);
            }
            if(current.right!=null) {
                queue.add(current.right);
                levelqueue.add(curLevel+1);
            }
        }
        result.add(temp);
        result.remove(0);
        Collections.reverse(result);
        return result;        
    }
}

成绩:
4ms,beats 10.19%,众数3ms,46.84%
Cmershen的碎碎念:
本题成绩较差,代码逻辑也很混乱,应该是因为处理的过程中流程过于复杂,且最后一步将数组翻转比较浪费时间。应考虑使用堆栈和队列两种数据结构存储数组。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

Binary Tree Traversal二叉树遍历方法总结

Binary Tree Traversal二叉树遍历方法总结这里总结的二叉树遍历分为两大类: 深度优先(depth-first traversal) 广度优先(breadth-first traver...
  • jackey_jk
  • jackey_jk
  • 2016年04月01日 02:58
  • 763

二叉树 level order 遍历问题汇总

一 如何确定层结束? 1 维护一个levelEnd,如果当前结点是level end,更新levelEnd 为queue.back(),注意先判断queue是否empty,(最后一层结束后,queue...
  • binling
  • binling
  • 2014年12月26日 16:29
  • 397

Binary Tree Level Order Traversal II 从底部倒着输出二叉树每一层的元素

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left...
  • chenyx90
  • chenyx90
  • 2016年01月07日 13:54
  • 146

Binary Tree Level Order Traversal II 二叉树层次遍历(广搜,queue)(重重)

题目: 点击打开链接 解答: 上一题采用的深搜+记录深度的fangh
  • skyoceanlover
  • skyoceanlover
  • 2014年08月24日 21:55
  • 530

【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】

【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a b...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月10日 07:30
  • 1653

LeetCode 144 Binary Tree Preorder Traversal(二叉树的前序遍历)+(二叉树、迭代)

翻译给定一个二叉树,返回其前序遍历的节点的值。例如: 给定二叉树为 {1,#, 2, 3} 1 \ 2 / 3 返回 [1, 2, 3]备注:用递归是微不足道的,...
  • NoMasp
  • NoMasp
  • 2016年03月19日 16:15
  • 3081

把二叉树打印成多行 按之字形顺序打印二叉树 binary tree zigzag level order traversal

把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 import java.util.*; /* public class TreeNod...
  • DuanLiuchang
  • DuanLiuchang
  • 2016年09月12日 21:02
  • 366

【LeetCode-面试算法经典-Java实现】【102-Binary Tree Level Order Traversal(二叉树层序遍历)】

【102-Binary Tree Level Order Traversal(二叉树层序遍历)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月08日 06:41
  • 2374

Tree Traversal(树的遍历)

(一)Binary Tree Preorder Traversal  https://leetcode.com/problems/binary-tree-preorder-traversal/desc...
  • joycetlm
  • joycetlm
  • 2018年01月09日 12:43
  • 5

69.Binary Tree Level Order Traversal-二叉树的层次遍历(中等题)

二叉树的层次遍历 题目给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例给一棵二叉树 {3,9,20,#,#,15,7} : 返回他的分层遍历结果: 挑战挑战1:只使用一个队列去...
  • Tri_Color_Flag
  • Tri_Color_Flag
  • 2016年09月22日 11:06
  • 212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Easy-题目27:107.Binary Tree Level Order Traversal II
举报原因:
原因补充:

(最多只允许输入30个字)