题目描述:
首先想到的就是bfs,放在一个队列里面然后每次队列中都先取出size,然后放入最后的result中
代码如下:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root == null){
return result
;
}
Deque<TreeNode> firs1 = new LinkedList<>();
firs1.add(root);
while (!firs1.isEmpty()) {
List<Integer> list = new ArrayList<>();
int count = firs1.size();
for (int i = 0; i < count; i++) {
TreeNode temNode = firs1.poll();
if(temNode.left !=null){
firs1.offer(temNode.left);
}
if(temNode.right != null){
firs1.offer(temNode.right);
}
list.add(temNode.val);
}
result.add(list);
}
return result;
}
}
这里其实也可以使用dfs,每次递归时将深度deep+1,即可完成
代码实现如下
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Map<Integer, List<Integer>> tem = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO 自动生成的方法存根
return o1.compareTo(o2);
}
});
List<List<Integer>> result = new ArrayList<>();
ges(root,tem ,0);
for (Map.Entry<Integer, List<Integer>> ss: tem.entrySet()) {
result.add(ss.getValue());
}
return result;
}
public void ges(TreeNode root,Map<Integer,List<Integer>> tem,int deep){
if(root == null){
return ;
}
if(tem.get(deep) == null){
List<Integer> list = new ArrayList<>();
list.add(root.val);
tem.put(deep, list);
}else {
List<Integer> list = new ArrayList<>();
list = tem.get(deep);
list.add(root.val);
tem.put(deep, list);
}
ges(root.left,tem,deep + 1);
ges(root.right,tem, deep + 1);
}
}