leetcode 103. Binary Tree Zigzag Level Order Traversal

一曲冷凌霜 提交于 2019-11-27 11:24:54

利用双向队列

偶数层当栈用,

奇数层当队列用

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        
        Deque<TreeNode> dp = new LinkedList<>();
        if(root == null)
            return res;
        
        dp.addFirst(root);
        boolean flag = true;
        
        while(!dp.isEmpty()){
            int size = dp.size();
            List<Integer> level = new ArrayList<>();
            
            for(int i=0; i<size; i++){
                if(flag){
                    TreeNode cur = dp.removeFirst();
                    System.out.println(cur.val);
                    if(cur.left != null)
                        dp.addLast(cur.left);
                    if(cur.right != null)
                        dp.addLast(cur.right);
                    level.add(cur.val);
                }else{
                    TreeNode cur = dp.removeLast();
                    
                    if(cur.right != null)
                        dp.addFirst(cur.right);
                    if(cur.left != null)
                        dp.addFirst(cur.left);
                    level.add(cur.val);
                    
                }
                
                    
            }
            
            if(!level.isEmpty())
                res.add(level);
            flag = !flag;
        }
        return res;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!