zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Python】[面向对象编程] 访问限制,继承和多态
    【Python】[面向对象编程] 类和实例
    【jQuery】 jQuery上下飘动效果
    【jQuery】scroll 滚动到顶部
    【Python】[模块]使用模块,安装第三方模块
    【jQuery】Jquery.cookie()
    【Python】[高级特性]切片,迭代,列表生成式,生成器,迭代器
    【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
    【JavaScript】 JSON
    【CSS3】 线性渐变
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3536937.html
Copyright © 2011-2022 走看看