a
/ \
b c
/ \ / \
d e f g
/
h
\
i
对于上面的二叉树,层次遍历结果为:
a
b c
d e f g
h
i
java实现:
public void levelTraverse(TreeNode node){
if(node == null){
return;
}
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(node);
int cur,last;
TreeNode current=null;
while(!queue.isEmpty()){
cur=0;
last=queue.size();
while(cur<last){
cur++;
current=queue.poll();
System.out.print(current.val+"\t");
if(current.left!=null){
queue.add(current.left);
}
if(current.right!=null){
queue.add(current.right);
}
}
System.out.println();
}
}
打印结果:
a
b c
d e f g
h
i
放到集合中返回:
public ArrayList<String> levelTraverseV2(TreeNode node){
ArrayList<String> list=new ArrayList<String>();
if(node == null){
return list;
}
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(node);
int cur,last;
TreeNode current=null;
while(!queue.isEmpty()){
cur=0;
last=queue.size();
while(cur<last){
cur++;
current=queue.poll();
list.add(current.val);
if(current.left!=null){
queue.add(current.left);
}
if(current.right!=null){
queue.add(current.right);
}
}
}
return list;
}
打印结果:
[a, b, c, d, e, f, g, h, i]
每一层放到一个集合中,再次改进:
public ArrayList< ArrayList<String>> levelTraverseV3(TreeNode node){
ArrayList< ArrayList<String>> list=new ArrayList< ArrayList<String>>();
if(node == null){
return list;
}
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(node);
int cur,last;
TreeNode current=null;
while(!queue.isEmpty()){
cur=0;
last=queue.size();
ArrayList<String> level=new ArrayList<String>();
while(cur<last){
cur++;
current=queue.poll();
level.add(current.val);
if(current.left!=null){
queue.add(current.left);
}
if(current.right!=null){
queue.add(current.right);
}
}
list.add(level);
}
return list;
}
打印结果:
[[a], [b, c], [d, e, f, g], [h], [i]]