leetcode-102-Binary-Tree-Level-Order-Traversal
题目描述(中等难度)
二叉树的层次遍历,输出一个 list 的 list。
解法一 DFS
这道题考的就是 BFS,我们可以通过 DFS 实现。只需要在递归过程中将当前 level 传入即可。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
DFS(root, 0, ans);
return ans;
}
private void DFS(TreeNode root, int level, List<List<Integer>> ans) {
if(root == null){
return;
}
//当前层数还没有元素,先 new 一个空的列表
if(ans.size()<=level){
ans.add(new ArrayList<>());
}
//当前值加入
ans.get(level).add(root.val);
DFS(root.left,level+1,ans);
DFS(root.right,level+1,ans);
}
解法二 BFS 队列
如果是顺序刷题,前边的 “> 98 题,public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) {
return ans;
}
Queue<TreeNode> treeNode = new LinkedList<>();
Queue<Integer> nodeLevel = new LinkedList<>();
treeNode.offer(root);
int level = 0;
nodeLevel.offer(level);
while (!treeNode.isEmpty()) {
TreeNode curNode = treeNode.poll();
int curLevel = nodeLevel.poll();
if (curNode != null) {
if (ans.size() <= curLevel) {
ans.add(new ArrayList<>());
}
ans.get(curLevel).add(curNode.val);
level = curLevel + 1;
treeNode.offer(curNode.left);
nodeLevel.offer(level);
treeNode.offer(curNode.right);
nodeLevel.offer(level);
}
}
return ans;
}
方案二
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com