广度优先搜索解题:
1.先定义接受的大集合数组 List<List<Integer>>,在创建一个队列来模拟树的进队列操作。
2.这道题的层序遍历重点在于每一层的全部结点组成一个数组来进行存储,所以要如何辨别每一层的节点是解题关键。我们可以用for循环来根据队列中的节点来进行每层节点的过程。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {//定义接受的大集合数组List<List<Integer>> li1=new ArrayList<List<Integer>>();//判断root为零的情况if(root==null){return li1;}//声明一个队列Queue<TreeNode> qu=new LinkedList<TreeNode>();//把root的根节点加入队列中qu.offer(root);//循环进队列和出队列while(!qu.isEmpty()){//定义的一个小集合数组List<Integer> li2=new ArrayList<Integer>();//获取队列中的长度int size=qu.size();//一层一层的遍历到定义的集合数组中去for(int i=0;i<size;i++){//弹出节点TreeNode j=qu.poll();//把弹出的节点加入到小的集合中去li2.add(j.val);//进行弹出节点的下一层左节点的进队列操作if(j.left!=null){qu.offer(j.left);}//进行弹出节点的下一层右节点的进队列操作if(j.right!=null){qu.offer(j.right);}}//把一层一层的节点小集合数组加入到大集合数组中li1.add(li2);}return li1;}
}