给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
/**
*
* 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
* @author Dell
*
*/
public class Test69 {
public static TreeNode CreatTree(TreeNode t)
{
Scanner sc=null;
sc=new Scanner(System.in);
t=creatNode(t,sc);
return t;
}
private static TreeNode creatNode(TreeNode t, Scanner sc) {
String temp=sc.next();
if(temp.trim().equals("#"))
{
return null;
}
else
{
t=new TreeNode(Integer.parseInt(temp));
t.left=creatNode(t.left,sc);
t.right=creatNode(t.right,sc);
return t;
}
}
public static ArrayList<ArrayList<Integer>> levelOrder(TreeNode root)
{
if(root==null)
return new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> list=new ArrayList<>();
LinkedList<TreeNode> queue =new LinkedList<>();
ArrayList<Integer> list1=new ArrayList<>();
TreeNode p=root;
queue.add(p);
queue.add(null);
while(queue.isEmpty()!=true)
{
TreeNode temp=queue.poll();
if(temp!=null){
//System.out.print(temp.val+" ");
list1.add(temp.val);
if(temp.left!=null)
queue.add(temp.left);
if(temp.right!=null)
queue.add(temp.right);
}
if(queue.peek()==null)
{ queue.poll();
if(queue.isEmpty()!=true){
list.add(list1);
list1=new ArrayList<>();
//System.out.println();
queue.add(null);
}
else
{
list.add(list1);
}
}
}
return list;
}
public static void main(String[] args) {
TreeNode t=null;
t=CreatTree(t);
ArrayList<ArrayList<Integer>> list=null;
list=levelOrder(t);
System.out.println(list);
}
}