之字形打印二叉树

208 阅读1分钟

之字形打印二叉树

请实现一个函数按照之字形顺序从上向下打印二叉树。

即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

样例
输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]
    8
   / \
  12  2
     / \
    6   4
输出:[[8], [2, 12], [6, 4]]

BFS

时间复杂度O(n)

class Solution {
    public List<List<Integer>> printFromTopToBottom(TreeNode root) {
        List<List<Integer>> ras = new ArrayList<>();
        if(root==null) return ras;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        boolean flag = true;
        while(!queue.isEmpty()){
            int size = queue.size();
            List<Integer> curList = new LinkedList<>();
            for(int i = 0;i < size;i++){
                TreeNode node = queue.poll();
                if(flag){
                	curList.add(node.val);
                }else{
                	curList.add(0,node.val);
                }
                if(node.left != null){
                	queue.add(node.left);
                }
                if(node.right != null){
                	queue.add(node.right);
                }
            }
            flag = !flag;
            ras.add(curList);
        }
        return ras;
    }
}