Redian新闻
>
雷布斯:说唱新星
avatar
雷布斯:说唱新星# PDA - 掌中宝
f*c
1
这题试了好几个办法总是通不过,按说不难的,求帮忙看看,谢谢!
public class Solution {
public List> levelOrder(TreeNode root) {
List> result = new ArrayList>();
if(root == null) return result;
Queue current = new LinkedList(); //store
current level TreeNode
current.add(root);
List levelValue = new ArrayList(); //store
elements in current level
while(!current.isEmpty()) {
Queue nextLevel = new LinkedList();
while(!current.isEmpty()) {
TreeNode curr = current.remove();
levelValue.add(curr.val);
if(curr.left != null) nextLevel.add(curr.left);
if(curr.right != null) nextLevel.add(curr.right);
}
current.addAll(nextLevel);
result.add(levelValue);
levelValue.clear();
}
return result;
}
}
avatar
c*y
2
啥也不说了,自个看吧!
avatar
z*7
3
move
List levelValue = new ArrayList();
inside the first while loop and remove
levelValue.clear();
avatar
r*k
4
哇塞
赞一个
认真

【在 z*****7 的大作中提到】
: move
: List levelValue = new ArrayList();
: inside the first while loop and remove
: levelValue.clear();

avatar
n*5
5
ls 说的对。
result.add(levelValue);
levelValue.clear(); --你保存了之后又clear 了,就什么也没存进去。
可以改成 result.add(new ArrayList(levelValue));
avatar
f*c
6
谢谢大牛,修改过以后已经通过了。但是我还是有个疑问:
原来的code里面,
“result.add(levelValue);
levelValue.clear();”
levelValue.clear()以后难道之前add到result里面的levelValue也clear吗?应该不是
吧?

【在 z*****7 的大作中提到】
: move
: List levelValue = new ArrayList();
: inside the first while loop and remove
: levelValue.clear();

avatar
z*7
7
ls给你解释过了,是被clear掉了(因为levelValue还在指向被add到result里的那部分
空间,clear levelValue 的时候result也被改了),所以你原来的code才ac不了

【在 f********c 的大作中提到】
: 谢谢大牛,修改过以后已经通过了。但是我还是有个疑问:
: 原来的code里面,
: “result.add(levelValue);
: levelValue.clear();”
: levelValue.clear()以后难道之前add到result里面的levelValue也clear吗?应该不是
: 吧?

avatar
f*c
8
明白了,谢谢!

【在 z*****7 的大作中提到】
: ls给你解释过了,是被clear掉了(因为levelValue还在指向被add到result里的那部分
: 空间,clear levelValue 的时候result也被改了),所以你原来的code才ac不了

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。