每天一题LeetCode【第54天】

T103. Binary Tree Zigzag Level Order Traversal【Medium

题目

给定一个二叉树,按 Z 子顺序返回其节点的值。 (即从左到右,然后从右到左,然后再从左到右这样)。

举个例子:

给出二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回:

[
  [3],
  [20,9],
  [15,7]
]

思路

思路就是往下添加时,偶数从左往右添加,奇数从右往左添加。(从 0 层开始)

从右往左添加:

LinkedList.add(0, curr.val);

代码

代码取自 Top Solution,稍作注释

 public List<List<Integer>> zigzagLevelOrder(TreeNode root) 
    {
        List<List<Integer>> sol = new ArrayList<>();
        travel(root, sol, 0);
        return sol;
    }
    private void travel(TreeNode curr, List<List<Integer>> sol, int level)
    {
        // 若是空的树,返回null
        if(curr == null) return;
        // 随着深度的增加添加链表 
        if(sol.size() <= level)
        {
            List<Integer> newLevel = new LinkedList<>();
            sol.add(newLevel);
        }
        // 得到当前数组
        List<Integer> collection  = sol.get(level);
        // 偶数从左往右,奇数从右往左
        if(level % 2 == 0) collection.add(curr.val);
        else collection.add(0, curr.val);
        // 递归遍历左右节点
        travel(curr.left, sol, level + 1);
        travel(curr.right, sol, level + 1);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,995评论 2 36
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,510评论 1 31
  • 二叉树的遍历想必大家都不陌生,主要有三种遍历方式:前序遍历(pre-order traversal),中序遍历(i...
    akak18183阅读 1,157评论 0 1
  • 昨天发出一份销售信,发给了24位朋友,都是曾经关系不错但也不常联系的女性朋友,结果不是令人激动的,也不是沮丧...
    花色春秋阅读 308评论 0 0