107. 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   7

 

return its bottom-up level order traversal as:

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

链接: http://leetcode.com/problems/binary-tree-level-order-traversal-ii/

一刷,比102题只多了最后一步,还是用了2个list,第二遍可以试一下DFS

 1 class Solution(object):
 2     def levelOrderBottom(self, root):
 3         if not root:
 4             return []
 5         result = []
 6         prev = [root]
 7         cur = []
 8         
 9         while prev:
10             for elem in prev:
11                 if elem.left:
12                     cur.append(elem.left)
13                 if elem.right:
14                     cur.append(elem.right)
15             result.append([e.val for e in prev])
16             prev, cur = cur, []
17         result.reverse()
18         return result

2/16/2017, Java

错误长的都不知道该怎么写了,而且这段代码效率低得可以不看了

1. List, ArrayList, LinkedList, Queue, Stack的各种区别

2. Interface, Implementing Class的区别,关系

3. List<List<Integer>> ret = new ArrayList<>(); 语法上这是怎么一回事

4. stack(level); level.clear();之后stack里面都是空List,这让用Python的人怎么活。所以Java是怎么存储数据的!

5. 效率提高

 1 public class Solution {
 2     public List<List<Integer>> levelOrderBottom(TreeNode root) {
 3 
 4         Queue<TreeNode> current = new LinkedList<TreeNode>();
 5         TreeNode p = new TreeNode(-1);
 6         List<List<Integer>> ret = new ArrayList<>();
 7         List<Integer> level = new ArrayList<Integer>();
 8         Stack<List<Integer>> stack = new Stack<>();
 9         int arraySize = 0;
10         
11         if (root == null) return ret;
12 
13         current.add(root);
14         while(current != null && !current.isEmpty()) {
15             arraySize = current.size();
16             for(int i = 0; i < arraySize; i++) {
17                 p = current.poll();
18                 if (p.left != null) {
19                     current.add(p.left);
20                 }
21                 if (p.right != null) {
22                     current.add(p.right);
23                 }
24                 level.add(p.val);
25             }
26             stack.push(level);
27             level = new ArrayList<Integer>();
28         }
29         while(!stack.empty()) {
30             ret.add(stack.pop());
31         }
32         return ret;
33     }
34 }

 

posted @ 2016-06-19 00:54  panini  阅读(110)  评论(0编辑  收藏  举报