剑指offer 61题 【树】按之字形顺序打印二叉树

来源:互联网 发布:明星年龄造假知乎 编辑:程序博客网 时间:2024/06/06 09:44

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
牛客传送门:点击打开链接
import java.util.*;public class Title61 {    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {        // 所求结果        ArrayList<ArrayList<Integer> > result = new ArrayList<ArrayList<Integer> >();        if(pRoot == null)            return result; // 这里返回的不是null        // 每层的数据,加入result        ArrayList<Integer> line = new ArrayList<Integer>();                // 是否反转        boolean isRotate = true;        Queue<TreeNode> queue = new LinkedList<TreeNode>();        queue.add(pRoot);        line.add(pRoot.val);        result.add(line);                // 用于反转        Stack<Integer> stack = new Stack<Integer>();        while(!queue.isEmpty()){            // 上一层的总数            int count = queue.size();            // 重置            line = new ArrayList<Integer>();                        if(isRotate){                while(count-- > 0){                    TreeNode node = queue.poll();                    if(node.left != null){                        queue.add(node.left);                        stack.add(node.left.val);                    }                    if(node.right != null){                        queue.add(node.right);                        stack.add(node.right.val);                    }                }                // 将栈中的数添加到line中                while(!stack.isEmpty()){                    line.add(stack.pop());                }            }else{                while(count-- > 0){                    TreeNode node = queue.poll();                    if(node.left != null){                        queue.add(node.left);                        line.add(node.left.val);                    }                    if(node.right != null){                        queue.add(node.right);                        line.add(node.right.val);                    }                }            }                        if(line.size() >0)                result.add(line);            // 下一层反转            isRotate = !isRotate;        }        return result;    }        /**     * 测试用例     *      1     *    2   3     *  4  5 6  7     * 8 9     */    public static void main(String[] args) {        TreeNode a = new TreeNode(1);        TreeNode b = new TreeNode(2);        TreeNode c = new TreeNode(3);        TreeNode d = new TreeNode(4);        TreeNode e = new TreeNode(5);        TreeNode f = new TreeNode(6);        TreeNode g = new TreeNode(7);        TreeNode h = new TreeNode(8);        TreeNode i = new TreeNode(9);        a.left = b;a.right = c;        b.left = d;b.right = e;c.left = f;c.right = g;        d.left = h;d.right = i;        ArrayList<ArrayList<Integer> > result = new Title61().Print(a);        for(ArrayList<Integer> line : result){            System.out.println(line);        }        /*[1]          [3, 2]          [4, 5, 6, 7]          [9, 8]        */    }}


0 0