62、二叉树的层次遍历
题目:
我的代码:将其改成只用一个队列来实现,不得不说效率提高了不少,比之前使用两个队列的效率有所提升,后面有人使用了递归来实现,不得不说大神很多…需要注意的是如果root等于null需要返回result而不是null,这里需要注意一下
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root == null){
return null;
}
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;
}
}
附上递归的代码:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> lists = new ArrayList<>();
if (root == null) {
return lists;
}
func(lists, 0, root);
return lists;
}
private void func(List<List<Integer>> lists, int level, TreeNode root) {
if (root == null) {
return;
}
if (lists.size() == level) {
List<Integer> list = new ArrayList<>();
list.add(root.val);
lists.add(list);
} else {
lists.get(level).add(root.val);
}
func(lists, level + 1, root.left);
func(lists, level + 1, root.right);
}
}