二叉树——层序遍历

层序遍历就是逐层遍历树结构。

广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访问节点本身。 然后遍历它的相邻节点,其次遍历它的二级邻节点、三级邻节点,以此类推。
当我们在树中进行广度优先搜索时,我们访问的节点的顺序是按照层序遍历顺序的。

通常,我们使用一个叫做队列的数据结构来帮助我们做广度优先搜索。

解法

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

例如:
给定二叉树: [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; }
 * }
 *
 *
 *     1.首先将根节点放入队列中。 
       2.当队列为非空时,循环执行步骤3到步骤6,否则结束; 
       3.获取当前层的节点数 
       4.遍历当前层的节点
       5.出队列取得一个结点,访问该结点
       6. 若该结点的左子树为非空,则将该结点的左子树入队列; 
           若该结点的右子树为非空,则将该结点的右子树入队列; 
       7.结束。
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        
        // 如果为空树就直接返回
        if (root ==  null) {
         return result;   
        }
        
        // 1:根结点进入队列
        queue.offer(root);
        // 2:若队列非空,循环执行步骤 3-6,否则结束。
        while (!queue.isEmpty()) {
            //3. 获取当前层的节点数.
            int eleSize = queue.size();
            List<Integer> subList = new ArrayList<Integer>();
            // 4. 遍历当前层的节点
            for (int i = 0; i < eleSize; i++) {
                // 5. 队首出队并将value加入子list
                TreeNode node = queue.poll();
                subList.add(node.val);
                
                // 6. 将非空左右子树加入queue
                if (node.left != null) { // 如果队首的左结点不为空就把左结点入队
                    queue.offer(node.left);
                }
                if (node.right != null) { // 如果队首的右结点不为空就把右结点入队
                    queue.offer(node.right);
                }
            }
            // 添加一层
            result.add(subList);
        }
        
        return result;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,935评论 1 31
  • 【队列实现】遍历从根节点开始,首先将根节点入队,然后开始执行循环:节点出队,访问该节点,使其左右儿子入队基本过程:...
    日常表白结衣阅读 1,592评论 0 0
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,612评论 0 12
  • 今天:今天上班,但是也在工作,一直给刘哥分享使用奶昔的感觉,迈出一大步周三要去俱乐部考察,看书40页。 反思:坚持...
    miss敏敏阅读 559评论 0 0
  • 文/踏歌娘1、凤九一直以来都知道东华的陶艺做得很不错,这日她见东华坐在树荫下制陶,于是心血来潮想同东华一起学一学。...
    踏歌娘阅读 13,426评论 21 57