• Binary Tree Level Order Traversal


    [解题思路]

    记录下一层元素个数,这样每次遍历时就知道何时结束,只需一个queue

    用一个count来计数每一层的node的个数,

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
            ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            
            if(root == null)
                return result;
                
            LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
            queue.add(root);
            //用来计数每一层有多少个Node
            int nextLevelCount = 1;
            
            while(!queue.isEmpty()){
                int curLevel = nextLevelCount;
                nextLevelCount = 0;
                ArrayList<Integer> lvl = new ArrayList<Integer>();
                // 此循环就是根据nextLevelCount来从队列里拿出多少个Node
                for(int i = 0; i < curLevel; i++){
                    TreeNode tmp = queue.poll();
                    lvl.add(tmp.val);
                    if(tmp.left != null){
                        queue.add(tmp.left);
                        nextLevelCount++;
                    }
                    if(tmp.right != null){
                        queue.add(tmp.right);
                        nextLevelCount++;
                    }
                }
                result.add(lvl);
            }
            return result;
        }
    }

     用两个queue的方法

     1 public class Solution {
     2     public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
     3         ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
     4         if(root == null)
     5             return res;
     6             
     7         Queue<TreeNode> curlvl = new LinkedList<TreeNode>();
     8         
     9         
    10         curlvl.add(root);
    11         
    12         while(!curlvl.isEmpty()){
    13             ArrayList<Integer>  output = new ArrayList<Integer>();
    14             Queue<TreeNode> nextlvl = new LinkedList<TreeNode>();
    15             while(!curlvl.isEmpty()){
    16                 TreeNode n = curlvl.poll();
    17                 output.add(n.val);
    18                 if(n.left != null){
    19                     nextlvl.add(n.left);
    20                 }
    21                 if(n.right != null){
    22                     nextlvl.add(n.right);
    23                 }
    24             }
    25             res.add(output);
    26             curlvl = nextlvl;
    27         }
    28         return res;
    29     }
    30 }

    ref:http://www.cnblogs.com/feiling/p/3258537.html

  • 相关阅读:
    java mail 读取邮件列表,
    java itext 报错 com.itextpdf.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H'
    shiro 标签
    idea maven 创建webapp项目没有src目录
    is not allowed to connect to this MySQL server解决办法
    mybatis 插入数据并返回主键值
    idea15 生成mybatis代码
    android 打开新窗口
    Java开发笔记(八十四)文件与目录的管理
    Java开发笔记(八十三)利用注解技术检查空指针
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3536937.html
Copyright © 2020-2023  润新知