zoukankan      html  css  js  c++  java
  • LeetCode102 Binary Tree Level Order Traversal Java

    题目:
    Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7

    return its level order traversal as:

    [
      [3],
      [9,20],
      [15,7]
    ]

    分析:
    层次遍历二叉树。就是首先訪问二叉树的第一层元素,再訪问第二层,接着訪问第三层。以此类推。

    实现的方式是,用一个先进先出的队列作为辅助数据结构。用levelList保存每一层的元素,用resultList保存全部的levelList,然后
    (1)把根节点入队列。并把一个哨兵节点入队列。哨兵节点用于标识某一层已经结束
    (2)当队列中元素个数大于1时(除哨兵节点外还有其他元素)。进入循环。

    訪问该元素,假设该元素为哨兵节点。则说明这一层已经结束了,并将一个哨兵节点入队,用于标识下一层结束的地方,把levelList存入resultList。并建一个新的levelList保存下一层的元素;否则,把该节点的值放进levelList,并把它不为null的孩子节点入队。
    (3)把levelList加入resultList。由于最后一个哨兵节点没有办法被訪问到,导致保存最后一层元素的levelList没办法在循环中被加入进resultList。

    详细的代码例如以下:

    package global;
    
    public class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;
    
        public TreeNode(int x) {
            val = x;
        }
    
        @Override
        public String toString() {
            return "TreeNode [val=" + val + ", left=" + left + ", right=" + right
                    + "]";
        }
    
    }
    package leetcode102;
    
    import global.TreeNode;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * Created by liyuncong on 10/22/15.
     */
    public class LeetCode102 {
        public List<List<Integer>> levelOrder(TreeNode root) {
            List<List<Integer>> resultList = new ArrayList<List<Integer>>();
            if (root == null) {
                return resultList;
            }
    
            List<Integer> levelStorage = new LinkedList<Integer>();
            LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);
            queue.offer(null);
            while (queue.size() > 1) {
                TreeNode top = queue.poll();
                if (top == null) {
                    resultList.add(levelStorage);
                    queue.offer(null);
                    levelStorage = new LinkedList<Integer>();
                } else {
                    levelStorage.add(top.val);
                    if (top.left != null) {
                        queue.offer(top.left);
                    }
                    if (top.right != null) {
                        queue.offer(top.right);
                    }
                }
            }
            resultList.add(levelStorage);
    
            return resultList;
        }
    }
    
  • 相关阅读:
    windows10上安装 .NET Framework 3.5
    Mac上安装Tomcat服务器
    实验室中搭建Spark集群和PyCUDA开发环境
    训练实录
    Hello World
    存储管理
    java脚本实现selenium架构下的复选框、上传文件的操作
    java脚本,selenium工具,自动发QQ邮件
    用java脚本,selenium2.0工具,切换窗口经验总结
    六、排队论模型
  • 原文地址:https://www.cnblogs.com/llguanli/p/8409246.html
Copyright © 2011-2022 走看看