首页 > 其他 > 详细

[Leetcode]-- Binary Tree Level Order Traversal

时间:2014-02-01 13:57:30      阅读:421      评论:0      收藏:0      [点我收藏+]

[解题思路]

1.可以维护两个queue,当前层一个,下一层一个

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

 

这题就是BFS,不论是图还是树的一种基本遍历的方法,应该掌握,比较简单,我用了2个queue来存,其实不需要,用一个count来计数每一层的node的个数,我使用了一个queue在level order traversal ii里面

 

 

bubuko.com,布布扣
/**
 * 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;
    }
}
bubuko.com,布布扣

 

 

 

 

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

[Leetcode]-- Binary Tree Level Order Traversal

原文:http://www.cnblogs.com/RazerLu/p/3536937.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!