您的位置:首页 > 编程语言 > Java开发

LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)

2016-11-15 20:17 483 查看
一,问题描述:

1,给定一棵二叉树,返回它的层次遍历。

2,例如:



3,解题思路:

使用LinkedList queue=new LinkedList()。因为LinkedList具有队列的性质,即先进先出规则。然后统计每一层的节点个数,然后在每层从左到右输出节点。

二,AC了的程序(使用Java实现的)

import java.util.*;
class TreeNode{   //节点的构造
int val;
TreeNode left;
TreeNode right;
TreeNode(int x)
{
val=x;
}
}

public class Test2{

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

LinkedList<TreeNode> queue=new LinkedList<TreeNode>();  //定义一个LinkedList集合,其类型是TreeNode
queue.offer(root);  //首先把根进入队列中
while(!queue.isEmpty())  //队列不为空的
{
int num=queue.size();  //队列的长度;
List<Integer> templist=new ArrayList<Integer>();   //定义一个ArrayList集合

while(num>0)//首先判断num是否大于0先获取每一层的结点个数。
{
TreeNode node=queue.peek(); //查看队头元素,但是不删除队头的元素,队列是先进先出的规则
if(node.left!=null) //该节点的左孩子不为空
{
queue.offer(node.left); //将左孩子进入队尾
}
if(node.right!=null)   //如果该节点的右孩子不为空
{
queue.offer(node.right);  //将右孩子进入队尾。
}

int data=queue.poll().val;  //将节点从队头出队// 。
templist.add(data); //将出的节点加入到tempList集中
num--;  //然后每次减1.
}
list.add(templist);
}

return list;

}
public static void main(String []args)
{
Test2 test=new Test2();
Scanner scan=new Scanner(System.in);
TreeNode root=new TreeNode(3);
TreeNode p2=new TreeNode(9);
TreeNode p3=new TreeNode(20);
TreeNode p4=new TreeNode(15);
TreeNode p5=new TreeNode(7);

root.left=p2;
root.right=p3;
p3.left=p4;
p3.right=p5;

List<List<Integer>> list=test.levelOrder(root);
Iterator<List<Integer>> it1=list.iterator();
while(it1.hasNext())
{
List<Integer> list2=it1.next();
Iterator<Integer> it2=list2.iterator();
while(it2.hasNext())
{
int data=it2.next();
System.out.print(data+" ");
}
System.out.println();
}

}
}


运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java 二叉树
相关文章推荐