您的位置:首页 > 其它

Binary Tree Level Order Traversal 二叉树的层序遍历

2016-01-08 19:45 316 查看
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]
]

有了以前的经历,下边写了最基础的写法,理解比较简单。但是看起来代码量有点多
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> outter=new ArrayList<List<Integer>>();
        List<Integer> inner=new LinkedList<Integer>();
        if(root==null)  return outter;
        inner.add(root.val);
        outter.add(inner);
        inner=new LinkedList<Integer>();
        int curcount=1;
        int nexcount=0;
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode node=queue.poll();
            --curcount;
            if(node.left!=null){
                queue.add(node.left);
                inner.add(node.left.val);
                ++nexcount;
            }
            if(node.right!=null){
                queue.add(node.right);
                inner.add(node.right.val);
                ++nexcount;
            }
            if(curcount==0){
                curcount=nexcount;
                nexcount=0;
                if(!inner.isEmpty()){
                    outter.add(inner);
                    inner=new LinkedList<Integer>();
                }
            }
        }
        return outter;
    }
}

下边的写法没有对头节点进行特殊处理,包含在了统一的处理范围之内,据说,这就是传统的BFS!!
public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> outter=new ArrayList<List<Integer>>();
        List<Integer> inner=new LinkedList<Integer>();
        if(root==null)  return outter;
        int curcount=1;
        int nexcount=0;
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode node=queue.poll();
            inner.add(node.val);
            --curcount;
            if(node.left!=null){
                queue.add(node.left);
                ++nexcount;
            }
            if(node.right!=null){
                queue.add(node.right);
                ++nexcount;
            }
            if(curcount==0){
                curcount=nexcount;
                nexcount=0;
                if(!inner.isEmpty()){
                    outter.add(inner);
                    inner=new LinkedList<Integer>();
                }
            }
        }
        return outter;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: