美文网首页
剑指offer:按之字形顺序打印二叉树

剑指offer:按之字形顺序打印二叉树

作者: 衣介书生 | 来源:发表于2018-04-05 14:58 被阅读9次

    题目分析

    请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
    利用栈对需要逆序打印的层次进行逆序操作即可。

    代码

    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Stack;
    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
        }
    
    }
    */
    public class Solution {
        public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>> res = new ArrayList<>();
            if(pRoot == null) {
                return res;
            }
            Queue<TreeNode> q = new LinkedList<>();
            Stack<Integer> s = new Stack<>();
            ArrayList<Integer> layer = new ArrayList<>();
            q.add(pRoot);
            int start = 0;
            int end = 1;  // 记录每层的节点数
            boolean direction = false;  // 调整每层的打印方向
            while(!q.isEmpty()) {
                TreeNode temp = q.remove();
                if(direction) {
                    s.push(temp.val);
                } else {
                    layer.add(temp.val);
                }
                start ++;
                if(temp.left != null) {
                    q.add(temp.left);
                }
                if(temp.right != null) {
                    q.add(temp.right);
                }
                if(start == end) {
                    if(direction) {
                        while(!s.isEmpty()) {
                            layer.add(s.pop());
                        }                        
                    }
                    res.add(layer);
                    start = 0;
                    end = q.size();
                    direction = !direction;
                    layer = new ArrayList<Integer>();
                }
            }
            return res;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:剑指offer:按之字形顺序打印二叉树

          本文链接:https://www.haomeiwen.com/subject/kujbfftx.html