2012年10月21日星期日

Binary Tree Zigzag Level Order Traversal

public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        LinkedList<TreeNode> pre = new LinkedList<TreeNode>();
        if(root ==null) return result;
        boolean flag =true;
        pre.add(root);
        while(!pre.isEmpty()){
           TreeNode tmp=null;
           LinkedList<TreeNode> current = new LinkedList<TreeNode>();
           ArrayList<Integer> level = new ArrayList<Integer>();
           while(!pre.isEmpty()){
               if(flag == true){
                tmp = pre.removeFirst();
                if(tmp.left!=null)current.addLast(tmp.left);
                if(tmp.right!=null)current.addLast(tmp.right);
               }else{
                   tmp = pre.removeLast();
                   if(tmp.right!=null)current.addFirst(tmp.right);
                if(tmp.left!=null)current.addFirst(tmp.left);
               }
                level.add(tmp.val);             
           }
           flag = flag^true;
           result.add(level);
           pre = current;
        }       
        return result;
    }

没有评论: