1. 首页
  2. 剑指offer经典面试题

[剑指 Offer 第 2 版第 32_3 题] “按之字形顺序打印二叉树”做题记录

[剑指 Offer 第 2 版第 32_3 题] “按之字形顺序打印二叉树”做题记录

第 32-3 题:之字形打印二叉树

传送门:之字形打印二叉树牛客网 online judge 地址

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

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

样例:

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

思路:设置一个向左向右的变量更换当前层元素的插入方式即可。

Python 代码:

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

    # Definition for a binary tree node.


    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None


    class Solution(object):
        def printFromTopToBottom(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if root is None:
                return []
            queue = [root]
            res = []
            turn_left = True
            while queue:
                cur_list = []
                size = len(queue)
                for _ in range(size):
                    top = queue.pop(0)
                    if turn_left:
                        cur_list.append(top.val)
                    else:
                        cur_list.insert(0, top.val)
                    if top.left:
                        queue.append(top.left)
                    if top.right:
                        queue.append(top.right)
                res.append(cur_list)
                turn_left = not turn_left
            return res

Java 代码:

  import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.Stack;

    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;
            }
            LinkedList<TreeNode> queue = new LinkedList<>();
            queue.addLast(pRoot);
            boolean right = true;
            while (!queue.isEmpty()) {
                int size = queue.size();
                // 之 字形 一开始向右
                ArrayList<Integer> curLevel = new ArrayList<>();
                Stack<TreeNode> stack = new Stack<>();
                for (int i = 0; i < size; i++) {
                    if (right) {
                        TreeNode node = queue.removeFirst();
                        curLevel.add(node.val);
                        if (node.left != null) {
                            stack.add(node.left);
                        }
                        if (node.right != null) {
                            stack.add(node.right);
                        }
                    } else {
                        TreeNode node = queue.removeFirst();
                        curLevel.add(node.val);
                        if (node.right != null) {
                            stack.add(node.right);
                        }
                        if (node.left != null) {
                            stack.add(node.left);
                        }
                    }
                }
                while (!stack.isEmpty()) {
                    queue.addLast(stack.pop());
                }
                right = !right;
                res.add(curLevel);
            }
            return res;
        }

    }

作者:liweiwei1419

来源:https://liweiwei1419.github.io/sword-for-offer/


看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:[剑指 Offer 第 2 版第 32_3 题] “按之字形顺序打印二叉树”做题记录

    链接:https://www.javajike.com/article/3312.html

« [剑指 Offer 第 2 版第 32_1 题] “把二叉树打印成多行”做题记录
[剑指 Offer 第 2 版第 55-1 题] “二叉树的深度”做题记录»

相关推荐

QR code