leetcode-二叉树的层次遍历(Java)
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
借鉴其他人的思路,采用广度优先探索,使用队列。
若根节点为空,直接返回;
若根节点非空,则将根节点入队,然后,判断队列是否为空,若不为空,则将队首节点出队,访问,并判断其左右子节点是否为空,若不为空,则压入队列。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { List<List<Integer>> res=new ArrayList(); public List<List<Integer>> levelOrder(TreeNode root) { if(root==null)return res; //边界条件 Queue<TreeNode> q=new LinkedList(); //创建的队列用来存放结点,泛型注意是TreeNode q.add(root); while(!q.isEmpty()){ //队列为空说明已经遍历完所有元素,while语句用于循环每一个层次 int count=q.size(); List<Integer> list=new ArrayList(); while(count>0){ //遍历当前层次的每一个结点,每一层次的Count代表了当前层次的结点数目 TreeNode temp=q.peek(); q.poll(); //遍历的每一个结点都需要将其弹出 list.add(temp.val); if(temp.left!=null)q.add(temp.left); //迭代操作,向左探索 if(temp.right!=null)q.add(temp.right); count--; } res.add(list); } return res; } }