107Binary Tree Level Order Traversal II

来源:互联网 发布:好听有内涵的名字知乎 编辑:程序博客网 时间:2024/04/20 09:53

题目链接:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/

题目:

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).For example:Given binary tree {3,9,20,#,#,15,7},    3   / \  9  20    /  \   15   7return its bottom-up level order traversal as:[  [15,7],  [9,20],  [3]]

解题思路:
层次遍历要用到队列结构
1. 由于题目要求各层的元素要放在各层的 subList 中,所以在层次遍历时,遇到新一层的结点就创建一个新队列来存储它们(TreeNode)。
2. 当遍历它们下一层的子节点时,再将它们依次从队列中取出,把它们的值放入属于该层的 subList 中,形成该层的结点值列表。
3. 当 subList 存完该层所有结点的值后(即,存结点的队列为空时),将该 subList 放入最终的 res List 中。

我的代码实现与大神有些不同,但是运行时间是相同的,且我的代码更加短小精悍些~
但还是附上大神的参考链接:
http://blog.csdn.net/linhuanmars/article/details/23414711

代码实现:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<List<Integer>> levelOrderBottom(TreeNode root) {        LinkedList<List<Integer>> res = new LinkedList();        if(root == null)            return res;        LinkedList<TreeNode> queueOld = new LinkedList();        queueOld.offer(root);        while(!queueOld.isEmpty()) {            List<Integer> subList = new ArrayList();            LinkedList<TreeNode> queueNew = new LinkedList();            while(!queueOld.isEmpty()) {                TreeNode node = queueOld.remove();                if(node.left != null)                    queueNew.offer(node.left);                if(node.right != null)                    queueNew.offer(node.right);                subList.add(node.val);            }            queueOld = queueNew;            res.addFirst(subList);        }        return res;    }}
34 / 34 test cases passed.Status: AcceptedRuntime: 3 ms
0 0
原创粉丝点击