leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28

来源:互联网 发布:magics软件windows版本 编辑:程序博客网 时间:2024/06/05 14:28

最近做了不少二叉树的题,所以这道题两遍过了,第一遍是特别傻逼的忘记对root判空了,一定要注意。

方法是层序历遍,然后用tmp来标记行,用add()和addFirst()来实现LIST的不同方向插入


public static List<List<Integer>> zigzagLevelOrder(TreeNode root) {        LinkedList<List<Integer>> a1 = new LinkedList<List<Integer>>();        LinkedList<Integer> a2 = new LinkedList<Integer>();        Queue<TreeNode> q = new LinkedList<TreeNode>();        int i=0,j=0;        int tmp=0;        if(root==null) return a1;        q.offer(root);        j++;        while (!q.isEmpty()){            TreeNode t = q.poll();            j--;            if(t.left!=null){                q.offer(t.left);                i++;            }            if(t.right!=null){                q.offer(t.right);                i++;            }            if(tmp==0){                a2.add(t.val);                if(j==0){                    j=i;                    i=0;                    a1.add(a2);                    a2 = new LinkedList<Integer>();                    tmp=1;                }            }else{                a2.addFirst(t.val);                if(j==0){                    j=i;                    i=0;                    a1.add(a2);                    a2 = new LinkedList<Integer>();                    tmp=0;                }            }        }        return a1;    }


Update 2015/08/18: 相较于上一个历遍题,只需要增加一个变量flag记录层数,奇数层正序,偶数层逆序即可


/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */  public class Solution {    /**     * @param root: The root of binary tree.     * @return: A list of lists of integer include      *          the zigzag level order traversal of its nodes' values      */    public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {        // write your code here        ArrayList<ArrayList<Integer>> res = new ArrayList<>();        Queue<TreeNode> q = new LinkedList<>();        if (root == null)            return res;        int current = 1;        int next = 0;        int flag = 1;        ArrayList<Integer> in = new ArrayList<>();        while (root != null){            if (flag % 2 == 1)                in.add(root.val);            else                in.add(0, root.val);            if (root.left != null){                q.add(root.left);                next++;            }            if (root.right != null){                q.add(root.right);                next++;            }            if (q.size() != 0){                root = q.poll();                current--;                if (current == 0){                    res.add(in);                    in = new ArrayList<Integer>();                    current = next;                    next = 0;                    flag++;                }            } else {                res.add(in);                break;            }        }        return res;    }}



0 0