美文网首页
剑指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] 按之字形顺序打印二叉树

    本文首发于我的个人博客:尾尾部落 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第...

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

    题目分析 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行...

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

    按之字形顺序打印二叉树 请实现一个函数按照之字顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的...

  • JZ-059-按之字形顺序打印二叉树

    按之字形顺序打印二叉树 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从...

  • 打印二叉树

    按之字形顺序打印二叉树 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺...

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

    题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照...

  • 剑指offer第二版-32.3.之字形打印二叉树

    本系列导航:剑指offer(第二版)java实现导航帖 面试题32.3:之字形打印二叉树 题目要求:请实现一个函数...

  • 剑指 offer 学习之按之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行...

  • 剑指offer——之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行...

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

网友评论

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

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