题目
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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
题意
从下至上层序遍历一棵树,将同一层的节点存入一个数组中,再把每一层存在数组中。
解题思路
广搜的思想。
将根节点存入队列开始。
当队列不为空时,每次队列中都是当前层的节点,从左至右将当前层节点的子节点存入队列,并每次都将当前层节点出队,存入结果。
代码
java:
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
Queue<TreeNode> queue = new LinkedList<>();
if (root == null) {
return res;
}
queue.offer(root);
while (!queue.isEmpty()) {
int levelNum = queue.size();
List<Integer> sub = new LinkedList<>();
for (int i = 0; i < levelNum; i++) {
if (queue.peek().left != null) {
queue.offer(queue.peek().left);
}
if (queue.peek().right != null) {
queue.offer(queue.peek().right);
}
sub.add(queue.poll().val);
}
res.add(0, sub);
}
return res;
}
}
python:
class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
queue = []
res = []
if root == None:
return res
queue.append(root)
while len(queue) != 0:
level = len(queue)
sub = []
for i in range(level):
if queue[0].left != None:
queue.append(queue[0].left)
if queue[0].right != None:
queue.append(queue[0].right)
sub.append(queue[0].val)
queue.pop(0)
res.insert(0,sub)
return res