您的位置:首页 > 其它

102 Binary Tree Level Order Traversal

2016-06-09 22:09 232 查看
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:

Given binary tree 
[3,9,20,null,null,15,7]
,

3
/ \
9  20
/  \
15   7


return its level order traversal as:

[
[3],
[9,20],
[15,7]
]


BFS模板题。
粗暴了,直接两个队列,一个记录node,一个记录深度

public List<List<Integer>> levelOrder(TreeNode root)
{
List<List<Integer>> retlist=new ArrayList<>();
if(root==null)
return retlist;

ArrayDeque<TreeNode> deque=new ArrayDeque<>();
ArrayDeque<Integer> leveldeq=new ArrayDeque<>();
deque.add(root);
leveldeq.add(1);
int prelevel=1;
ArrayList<Integer> arraylist=new ArrayList<>();
while(!deque.isEmpty())
{
TreeNode t=deque.poll();
int level=leveldeq.poll();
if(level>prelevel)
{
retlist.add(new ArrayList<>(arraylist));
arraylist.clear();
}
arraylist.add(t.val);
if(t.left!=null)
{
deque.add(t.left);
leveldeq.add(level+1);
}
if(t.right!=null)
{
deque.add(t.right);
leveldeq.add(level+1);
}
prelevel=level;
}
retlist.add(arraylist);
return retlist;
}


update 2016.7.20

深度不用额外使用队列来记录,设置计数值,每次出队就减少计数值,每当减到0表明本层已经遍历完毕,下一层的元素数目就是当前队列的size,把计数值重置为当前队列size即可

public List<List<Integer>> levelOrder(TreeNode root)
{
List<List<Integer>> retlist=new ArrayList<>();
if(root==null)
return retlist;

ArrayDeque<TreeNode> deque=new ArrayDeque<>();
deque.add(root);
int level=1;
ArrayList<Integer> arraylist=new ArrayList<>();
while(!deque.isEmpty())
{
TreeNode t=deque.poll();

if(t.left!=null)
deque.add(t.left);

if(t.right!=null)
deque.add(t.right);

level--;
arraylist.add(t.val);

if(level==0)
{
retlist.add(new ArrayList<>(arraylist));
arraylist.clear();
level=deque.size();
}

}
return retlist;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: